第一个JDBC程序
本节课来看如何使用JDBC来读取数据库中的数据。
首先所有和数据库打交道的类都打包在 java.sql.* 或 javax.sql.* 里面。
驱动包需要引入到项目中。把它拷贝到项目的lib目录下面,然后注册驱动包。
准备数据
使用mysql执行下面sql语句,生成一张表并插入数据记录:
DROP TABLE IF EXISTS `sites`;
CREATE TABLE `sites` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(30) NOT NULL,
`Url` varchar(30) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `sites` VALUES ('1', 'FoxDevelop', 'www.foxdevelop.com');
INSERT INTO `sites` VALUES ('2', 'BING', 'www.bing.com');
INSERT INTO `sites` VALUES ('3', '谷歌', 'www.google.com');Code language: JavaScript (javascript)
创建Java项目
打开eclipse,创建一个java project项目,起名叫JDBCDemo,创建一个带有main方法的类。
步骤
1 引入包
import java.sql.*;Code language: JavaScript (javascript)
2 注册JDBC驱动程序
使用的是 mysql-connector-java 8.0.12 驱动包,和旧版本不一样,注册驱动如下:
Class.forName("com.mysql.cj.jdbc.Driver");Code language: CSS (css)
3 创建一个数据库连接
String url = "jdbc:mysql://localhost:3306/jdbcdemo?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true";
Connection conn = DriverManager.getConnection(url,"root","123321");Code language: JavaScript (javascript)
连接时需要指明IP和端口 localhost:3306,数据库名 jdbcdemo,以及一些配置参数。
4 创建执行语句对象
Statement statement = conn.createStatement();
5 执行sql查询语句
ResultSet resultSet = statement.executeQuery("select id, name, url from sites");Code language: JavaScript (javascript)
6 获取结果集中的数据
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
System.out.println(resultSet.getString("url"));
}Code language: JavaScript (javascript)
7 引入驱动包jar。因为是java application,直接引入就可以;如果是web项目则把它放在lib目录下。
完整代码
import java.sql.*;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");//注册JDBC驱动
String url = "jdbc:mysql://localhost:3306/jdbcdemo?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true";
Connection conn = DriverManager.getConnection(url,"root","123321");
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery("select id, name, url from sites");
while(resultSet.next()){
System.out.println(resultSet.getInt("id"));
System.out.println(resultSet.getString("name"));
System.out.println(resultSet.getString("url"));
}
if(statement != null) {
statement.close();
}
if(conn != null) {
conn.close();
}
}
}Code language: JavaScript (javascript)
补充说明
- mysql-connector-java 8.x 版本驱动类为
com.mysql.cj.jdbc.Driver,5.x 版本为com.mysql.jdbc.Driver - url参数中 serverTimezone 必须设置,否则可能报时区错误;useSSL=false 在开发环境可关闭SSL验证
- 资源关闭顺序应为 ResultSet → Statement → Connection,示例只关了 Statement 和 Connection,实际生产环境建议用 try-with-resources 自动关闭
- Class.forName() 在 JDBC 4.0+ 且驱动包 META-INF/services/java.sql.Driver 存在时可省略,但显式写更清晰
- 查询字段名在 getInt()、getString() 中大小写敏感,需和SQL语句中 select 的字段别名或表字段名一致
Previous: 什么是JDBC
Next: 使用JDBC插入记录