JDBC基础实现方法
一、 JDBC的概述
JDBC(Java DataBase Connection)即Java数据库连接技术,是指一整套用于执行SQL语句的Java API和技术,主要存放在java.sql包中,Java程序可通过这套API连接一个关系型数据库,并进行操作。
由于不同厂商的数据库产品的内部原理不同,如果直接用不同厂商提供的API操作数据库,Java程序的可移植性非常差。所以JDBC要求各个厂商统一按照Java提供的规范来设计数据库驱动,使它们都能够与Java提供的API兼容,使得代码通用性增强。
如图,JDBC是Java程序与数据库系统之间的缓冲层。
二、 JDBC的主要API
1. Driver接口
- 实现数据库驱动程序的接口,又厂商负责实现并提供,开发者只需引入驱动不同数据库的jar包。
2. DriverManager类
-
用于加载JDBC驱动程序,并建立与数据库的连接。
-
有两个重要的静态方法:
方法 功能 void registerDriver (Driver driver) 用于加载数据库驱动程序。 Connection getConnection(String url, String user, String password) 连接数据库并返回连接对象。
3. Connection接口
| 方法 | 功能 |
|---|---|
| Statement createStatement () | 获取一个陈述器对象 |
| PreparedStatement prepareStatement (String sql) | 获取一个SQL预编译的陈述器 |
| CallableStatement prepareCall (String sql) | 获取SQL操作的储存过程 |
| DatabaseMetaData getMetaData() | 获取数据库元数据的对象。 |
4. Statement接口
| 方法 | 功能 |
|---|---|
| boolean execute (String sql) | 可执行任何SQL语句,有结果集时为true,否则为false。 |
| ResultSet executeQuery (String sql) | 执行select语句,返回结果集 |
| int executeUpdate (String sql) | 执行insert、update、delete语句,返回受影响行数 |
5. ResultSet接口
-
用于存放和解析结果集,对象初始化时游标在第一行,调用next()方法换行。
-
数据获取方法
方法 功能 getXXX (int index) 以索引方式获取某字段的数据。 getXXX (String field) 以字段名获取某字段的数据。 -
游标操作方法
方法 功能 void next() 游标移动到下一行 void previout () 游标移动到上一行 void absolute (int row) 游标移动到指定行 void afterLast () 游标移动到尾行之后 void beforeFirst () 游标移动到首行之前 void last () 游标移动到尾行
6. PreparedStatement接口
实际开发中往往需要将程序的变量作为SQL语句的参数,PreparedStatement是Statement的子接口,可预编译SQL语句,用占位符“?”代替参数进行预编译,之后在用 setXXX()方法给参数赋值。示例:
String sql = "insert into tab_user(id, name, birthday) value(?, ?, ?)";
PreparedStatement ps = connection.preparedStatement(sql);
ps.setInt(1, 101); //第一个参数是字段索引,第二个是数据。
ps.setString(2, "King");
ps.setDate(3, "2020-1-1");
ps.executeUpdate();
具体方法列表请查看帮助文档。
三、实现JDBC的基本步骤
-
将数据库驱动的 jar包(mysql-connector-java.jar)放到 lib目录,并右键引用 jar包,确认MySQL服务正在运行。
-
加载并注册驱动,有两种方式:
-
Class.forName("com.mysql.jdbc.Driver"); 该方法作用是加载并初始化一个指定的类。
-
DriverManager.registerDriver(new com.mysql.jdbc.Driver() ); 由于Driver对象源码中默认存在一段静态代码自动执行
Class.forName("driverName"),所以此方法会使驱动重复注册。
-
-
连接数据库时,其中参数
URL="jdbc:mysql://hostName:port/databaseName?useUnicode=true&characterEncoding=utf-8&useSSL=true";jdbc:mysql://是规定格式;- hostName:port 是主机地址和端口号;
- databaseName 是MySQL服务中必须已经存在的一个数据库对象的名称。
- ?后面用来设置一些参数,必须设置useSSL=true,否则会报警,原因是MySQL版本高于JDBC驱动版本时,需要指明是否进行SSL连接。
import java.sql.*;
public class DataBaseConn {
public static void main(String[] args) {
// 先声明JDBC的工具对象
Connection connection;
Statement statement;
ResultSet resultSet;
// 连接数据库所需的参数
String url = "jdbc:mysql://localhost:3306/db_practice?useUnicode=true&characterEncoding=utf-8&useSSL=true";
String user = "root";
String password = "123456";
try {
// 1. 注册使用数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 通过DriverManager获取数据库连接。
connection = DriverManager.getConnection(url, user, password);
// 3. 通过connection建立陈述器对象。
statement = connection.createStatement();
// 4. 通过statement对数据库陈述SQL,并返回结果集。
resultSet = statement.executeQuery("select * from tab_student");
// 5. 解析结果集。
System.out.println("id | name | address | password");
while (resultSet.next()) {
int id = resultSet.getInt("Sno");
String name = resultSet.getString("Sname");
String address = resultSet.getString("address");
String psw = resultSet.getString("password");
System.out.printf("%d | %s | %s | %s \n", id, name, address, psw);
}
// 6. 使用后,释放资源。
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

浙公网安备 33010602011771号