自行封装JDBC工具类

将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

  

如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/7840614.html