Java连接数据库---JDBC

JDBC简介和作用

JDBC(Java Database Connectivity),中文名为java数据库连接,是SUN公司提供的使用Java访问数据库的应用程序接口,让程序员可以通过Java来进行数据库操作,现在的JDBC可以在Oracle官网进行下载。Python中像mysqldb,pymysql也是实现了PEP提供的数据库访问规范,只是在使用时简化了过程,没有像JDBC那种通过反射来注册驱动。

使用JDBC来操作Mysql数据库

先将JDBC进行封装,只对外提供获取数据库连接对象和关闭数据库连接的接口:

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
public class JDBCUtil {
private static String driver;
private static String url;
private static String username;
private static String password;

// 使用静态代码块在字节码文件加载时运行一次,对驱动,用户信息等进行初始化
static {

try {
Properties properties = new Properties(); // 这里通过双列集合来加载数据库配置信息
properties.load(demo1.class.getClassLoader().getResourceAsStream("JDBC.properties"));

driver= properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");

Class.forName(driver); // 注册JDBC驱动

} catch (Exception e) {
e.printStackTrace();
}

}

// 为调用者提供数据库连接对象
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}

// 使用重载来对不同情况的连接方式进行关闭
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) throws SQLException {
if (conn != null){
conn.close();
}

if (ps != null){
ps.close();
}

if (rs != null){
rs.close();
}
}

public static void close(Connection conn, PreparedStatement ps) throws SQLException {
close(conn, ps, null);
}

public static void close(PreparedStatement ps, ResultSet rs) throws SQLException {
close(null, ps, rs);
}

public static void close(PreparedStatement ps) throws SQLException{
close(null, ps, null);
}
}

使用封装好的JDBC工具类来操作数据库:

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
public class demo {
public static void main(String[] args) throws SQLException {

Connection conn = JDBCUtil.getConnection(); // 通过工具类获取连接

PreparedStatement ps = conn.prepareStatement("SELECT * FROM TEACHER WHERE TID = ?"); // 获取数据库执行对象,通过?占位符的方式可以有效防止SQL注入
ps.setString(1, "04");

ResultSet rs = ps.executeQuery(); // 执行查询语句,返回一个结果集,操作方式类似于迭代器获取数据

while (rs.next()){

String tid = rs.getString("tid");
String tname = rs.getString("tname");
System.out.println(tid + "..." + tname);

}

JDBCUtil.close(ps, rs);

PreparedStatement ps1 = conn.prepareStatement("UPDATE TEACHER SET TNAME = ? WHERE TID = ?");
ps1.setString(1, "jack");
ps1.setString(2, "04");
int affectedRows = ps1.executeUpdate(); // 执行更新语句,返回的是受影响行数
System.out.println(affectedRows);

JDBCUtil.close(conn, ps, rs);

}
}