JDBC封装学习笔记(一)

这几天一直在研究JDBC,相比于之前那种简单的代码,更需要追求封装性更好的代码,这样耦合度才会降低,比如,各种数据库的配置都放在一个properties文件中,这样在维护时就可以不用修改代码,直接修改配置文件的数据库信息即可。这个例子我用的是Mysql数据库,首先目录结构如下图所示:

jdbc.properties中的主要内容如下图所示,localhost:3306/后面是数据库的名称

然后接下来就到了重头戏了,代码部分,这里我封装了一个公共类,然后里面暂时写了两个方法,连接数据库和释放资源,当然这一次的实例不涉及到select操作,所以释放资源没有,不过道理是一样的,不过释放资源时,相比statement,connection。ResultSet对象是要先释放的

 1 公共类:JDBCUtils
 2 
 3 package com.jdbc.basedemo;
 4 
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.sql.Connection;
 8 import java.sql.DriverManager;
 9 import java.sql.ResultSet;
10 import java.sql.SQLException;
11 import java.sql.Statement;
12 import java.util.Properties;
13 
14 /*
15 * 操作数据库的公共类,里面是一些公共方法
16 * */
17 public class JDBCUtils {
18 // 获取数据库连接
19 // 连接数据库
20 
21 public static Connection getConnection() throws ClassNotFoundException, IOException, SQLException {
22 // 定义相关变量
23 String driverClass = null;
24 String jdbcUrl = null;
25 String user = null;
26 String password = null;
27 
28 // 读取配置文件jdbc.properties
29 InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
30 
31 Properties properties = new Properties();
32 properties.load(in);
33 driverClass = properties.getProperty("driver");
34 jdbcUrl = properties.getProperty("jdbcUrl");
35 user = properties.getProperty("user");
36 password = properties.getProperty("password");
37 // 加载数据库驱动
38 Class.forName(driverClass);
39 // 获取连接
40 Connection conn = DriverManager.getConnection(jdbcUrl, user, password);
41 return conn;
42 }
43 
44 // 释放资源的方法
45 
46 public static void closeSource(ResultSet rs, Statement statement, Connection conn) {
47 if (rs != null) {
48 try {
49 rs.close();
50 } catch (Exception e) {
51 // TODO: handle exception
52 e.printStackTrace();
53 }
54 }
55 if (statement != null) {
56 try {
57 statement.close();
58 } catch (Exception e) {
59 // TODO: handle exception
60 e.printStackTrace();
61 }
62 }
63 if (conn != null) {
64 try {
65 conn.close();
66 } catch (Exception e) {
67 // TODO: handle exception
68 e.printStackTrace();
69 }
70 }
71 }
72 
73 }

然后写了一个测试类,里面封装了一个公共的执行SQL的方法:

 1 TestJDBCDemo文件:
 2 
 3 package com.jdbc.basedemo;
 4 
 5 import java.io.IOException;
 6 import java.sql.Connection;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 
10 import org.junit.Test;
11 
12 public class TestJDBCDemo {
13 
14 public static void main(String[] args) {
15 // TODO Auto-generated method stub
16 
17 }
18 
19 // 封装一个通用的更新方法,适用于INSERT,UPDATE,DELETE
20 public void updateData(String sql) {
21 // 获取连接
22 Connection conn = null;
23 Statement statement = null;
24 try {
25 conn = JDBCUtils.getConnection();// 获得连接
26 statement = conn.createStatement(); // 创建statement对象
27 statement.executeUpdate(sql);
28 System.out.println(sql);
29 System.out.println("SQL执行成功");
30 } catch (ClassNotFoundException e) {
31 // TODO Auto-generated catch block
32 e.printStackTrace();
33 } catch (IOException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 } catch (SQLException e) {
37 // TODO Auto-generated catch block
38 e.printStackTrace();
39 } finally {
40 JDBCUtils.closeSource(rs,statement, conn);
41 System.out.println("资源关闭成功");
42 }
43 
44 }

// 测试方法

//这里用的是Junit框架,需要Junit的jar包
@Test
public void test01() {
String sql = "UPDATE userinfo SET username='伊戈达拉' WHERE username like '%杜兰特%'";
updateData(sql);
}

}

最后控制台运行结果截图附上:

原文地址:https://www.cnblogs.com/yaoruozi/p/8506058.html