第一个JDBC程序

第一个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 的字段别名或表字段名一致

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注