将JDBC冗余的代码进行封装,此处的冗余特指每次操作数据库必然建立连接和关闭流操作!代码注释很详细,此处不过多解释,直接进入代码部分:
1 package edu.aeon.jdbc;
2 import java.io.IOException;
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.PreparedStatement;
6 import java.sql.SQLException;
7 import java.util.Properties;
8 /**
9 * 类作用:该类用于封装jdbc对数据库(打开、关流)操作!
10 * @author lzj
11 * @create 2017年11月15日 下午5:53:43
12 */
13 public class JdbcUtil {
14 static Properties prs=null;
15 //加载资源文件处理类、只加载一次、且最先要加载到内存堆中
16 /*
17 * static{}(静态代码块)与{}(非静态代码块)的异同点
18 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
19 一般在代码块中对一些static变量进行赋值。
20 不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。
21 静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
22 一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。*/
23 static {
24 prs=new Properties();
25 try {
26 //加载数据库配置文件,如果加载xml,可用loadXML()
27 prs.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties"));
28 } catch (IOException e) {
29 e.printStackTrace();
30 }
31 }
32 /**
33 * @describe 用于建立与mysql数据库之间的连接
34 * @create at 2017年11月15日 下午6:51:35 by lzj
35 * @Parameters1 无
36 * @Returns Connection 数据库连接对象
37 */
38 public static Connection getMysqlConnection(){
39 try {
40 //注册mysql驱动类
41 Class.forName(prs.getProperty("mysql.driver"));
42 //将根据所传入url,用户名,密码所建立的mysql数据库连接对象返回
43 return DriverManager.getConnection(
44 prs.getProperty("mysql.url"),
45 prs.getProperty("mysql.username"),
46 prs.getProperty("mysql.password"));
47 } catch (ClassNotFoundException e) {
48 e.printStackTrace();
49 System.out.println("加载mysql驱动类时出错!");
50 return null;
51 } catch (SQLException e) {
52 e.printStackTrace();
53 System.out.println("建立数据库连接时出错!");
54 return null;
55 }
56 }
57 /**
58 * @descibe 该静态方法用于关闭对数据库的流操作!(可重载)
59 * 此处为了简单演示只写了一个关闭类,实际开发中该类重载很多次!
60 * @create at 2017年11月15日 下午6:54:45 by lzj
61 * @Parameters1 ps 数据库操作对象 、预编译
62 * @Parameters2 conn 数据库连接对象
63 * @Returns void
64 */
65 public static void closeResource(PreparedStatement ps,Connection conn){
66 try {
67 if(ps!=null) {
68 ps.close();
69 }
70 } catch (Exception e) {
71 e.printStackTrace();
72 System.out.println("ps流关闭异常!");
73 }
74 try {
75 if(conn!=null) {
76 conn.close();
77 }
78 } catch (Exception e) {
79 e.printStackTrace();
80 System.out.println("conn流关闭异常!");
81 }
82 }
83 }
配置文件database.properties:
1 ####################[mysql]####################
2 mysql.driver = com.mysql.jdbc.Driver
3 mysql.url = jdbc:mysql://localhost:3306/student
4 mysql.username = root
5 mysql.password = lzj_aeon+
6 ####################[oracle]####################
7 oracle.driver =
8 oracle.url =
9 oracle.username =
10 oracle.userpw =
封装好了之后我们写个测试类:
1 package edu.aeon.jdbc;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.SQLException;
6
7 /**
8 * @author lzj
9 * @create 2017年11月15日 下午6:40:39
10 * @describe
11 */
12 public class Test {
13
14 /**
15 * at 2017年11月15日 下午6:40:39 by lzj
16 * @Parameters1 String[] args
17 * @Returns void
18 */
19 public static void main(String[] args) throws SQLException {
20 Connection conn = JdbcUtil.getMysqlConnection();
21 PreparedStatement ps=null;
22 String sql="insert into student (id,name) values (?,?)";
23 try {
24 ps = conn.prepareStatement(sql);
25 ps.setInt(1, 666);
26 ps.setString(2, "lzj");
27 ps.execute();
28 System.out.println("数据插入成功!");
29 } catch (SQLException e) {
30 e.printStackTrace();
31 conn.rollback();
32 System.out.println("数据插入失败!");
33 }finally {
34 JdbcUtil.closeResource(ps, conn);
35 }
36 }
37 }
测试结果截图:
数据库相应信息截图:
为了方便大家共同学习,源码已打包上传至我的网盘:http://pan.baidu.com/s/1eS8LhAE 密码:z60x