在上一篇介绍JDBC基础使用的博文中,简单了解到JDBC的使用。但是,也看出了一定的弊端:重复代码量较大。在我们每次新建一个JDBC的类操作数据库时,都要不停的进行驱动的注册,数据库的连接,参数的输入等大量重复性的操作。所以,有没有什么方法简化这一类的操作呢?
其实,将这些重复的代码进行抽取,作为一个工具类,每次使用的时候进行调用即可,这样便能够达到代码的可复用性。
抽取JDBC工具类的思路:
- 将注册驱动进行抽取
- 抽取一个方法获取连接对象
- 需求:不必传递参数,并且保证工具类的通用性。
- 解决:配置文件。
一、获取连接
因为我们需要将JDBC抽取为工具类,便于使用。故采取静态方法。
1.注册驱动
1 2 3 4
| public static Connection getConnection() throws Exception { return DriverManager.getConnection(url, user, password); }
|
2.关闭资源
关闭资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| public static void close(Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
public static void close(Statement stmt, Connection conn, ResultSet rs) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } }
|
3.配置文件的读取
配置文件的读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| static { try { Properties pro = new Properties(); ClassLoader classLoader = JDBCUtils.class.getClassLoader(); URL resource = classLoader.getResource("jdbc.properties"); String path = resource.getPath();
pro.load(new FileReader(path)); url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver");
Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
|
4. 配置文件
配置文件放在当前模块src
目录下。文件名后缀为.properties
。以下为配置文件可写的内容:
1 2 3 4
| url=jdbc:mysql: user=root password=123456 driver=com.mysql.jdbc.Driver
|
5.代码总结
代码总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; public class JDBCUtils { private static String url; private static String user; private static String password; private static String driver;
static { try { Properties pro = new Properties(); ClassLoader classLoader = JDBCUtils.class.getClassLoader(); URL resource = classLoader.getResource("jdbc.properties"); String path = resource.getPath();
pro.load(new FileReader(path)); url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
public static Connection getConnection() throws Exception { return DriverManager.getConnection(url, user, password); }
public static void close(Statement stmt, Connection conn) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
} }
public static void close(Statement stmt, Connection conn, ResultSet rs) { if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } }
|
二、 JDBCUtils工具类实例使用
JDBCUtils工具类实例使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import cn.li.util.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement;
public class JDBCDemo10 { public static void main(String[] args) {
Connection conn = null; Statement stmt = null; ResultSet rs = null; PreparedStatement pstmt = null;
try { conn = JDBCUtils.getConnection(); String sql = "select * from user where username = ? and password = ?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "Tom"); pstmt.setString(2, "1234"); rs = pstmt.executeQuery(); boolean next = rs.next(); System.out.println(next); } catch (Exception e) { e.printStackTrace(); }finally { JDBCUtils.close(pstmt, conn, rs); }
} }
|
从以上代码实例中,可以看出我们抽取出的JDBCUtils工具类,大大简化了代码,并且增加了代码的可复用性。当我们需要更改数据库的相关配置时,只需要更改配置文件即可,而我们的JDBCUtils工具类却不用更改。
参考文献
[1] Itcast视频讲义
[2] Java项目读取resources资源文件路径那点事