JDBC
一、什么是 JDBC?
JDBC 是 Java Database Connectivity 的缩写,它是 Java 语言用于与关系型数据库进行连接和交互的一种标准接口。
JDBC 提供了一种统一的方式,使得 Java 应用程序能够通过标准的 API 与各种不同的数据库进行通信,而不需要关注具体数据库的实现细节。通过 JDBC,开发人员可以使用 Java 语言来执行 SQL 查询、更新数据库内容以及管理数据库事务。
JDBC API库包含下面提到的每个任务,都是与数据库相关的常用用法。
- 制作到数据库的连接。
- 创建SQL或MySQL语句。
- 执行SQL或MySQL查询数据库。
- 查看和修改所产生的记录。
从根本上来说,JDBC是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用Java编写不同类型的可执行文件,例如:
- Java Application
- Java Applets
- Java Servlets
- Java ServerPages (JSPs)
- Enterprise JavaBeans (EJBs)
所有这些不同的可执行文件就可以使用JDBC驱动程序来访问数据库,这样可以方便的访问数据。
JDBC具有ODBC一样的性能,允许Java程序包含与数据库无关的代码。
使用 JDBC,开发人员可以通过编写 Java 代码来连接数据库并执行各种操作,从而实现与数据库的交互。JDBC 提供了灵活且可扩展的接口,可以适用于不同的关系型数据库,如MySQL、Oracle、SQL Server等。
二、常见的JDBC组件
- Driver接口
- 实现数据库驱动程序的接口,又厂商负责实现并提供,开发者只需引入驱动不同数据库的jar包。
- DriverManager类
-
用于加载JDBC驱动程序,并建立与数据库的连接。
-
有两个重要的静态方法:
方法 功能 void registerDriver (Driver driver) 用于加载数据库驱动程序。 Connection getConnection(String url, String user, String password) 连接数据库并返回连接对象。
-
Connection接口
方法 功能 Statement createStatement () 获取一个陈述器对象 PreparedStatement prepareStatement (String sql) 获取一个SQL预编译的陈述器 CallableStatement prepareCall (String sql) 获取SQL操作的储存过程 DatabaseMetaData getMetaData() 获取数据库元数据的对象。 -
Statement接口
方法 功能 boolean execute (String sql) 可执行任何SQL语句,有结果集时为true,否则为false。 ResultSet executeQuery (String sql) 执行select语句,返回结果集 int executeUpdate (String sql) 执行insert、update、delete语句,返回受影响行数 -
ResultSet接口
-
用于存放和解析结果集,对象初始化时游标在第一行,调用next()方法换行。
-
数据获取方法
方法 功能 getXXX (int index) 以索引方式获取某字段的数据。 getXXX (String field) 以字段名获取某字段的数据。 -
游标操作方法
方法 功能 void next() 游标移动到下一行 void previout () 游标移动到上一行 void absolute (int row) 游标移动到指定行 void afterLast () 游标移动到尾行之后 void beforeFirst () 游标移动到首行之前 void last () 游标移动到尾行
- 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, "2023-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?parameter”;
jdbc:mysql:// 是规定格式;
hostName:port 是主机地址和端口号;
databaseName 是MySQL服务中必须已经存在的一个数据库对象的名称。
?parameter 用来设置一些参数,主要必须设置三个字符集参数,否则会报警。
四 JDBC 完整实现代码
pom.xml
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
DBUtil.java
package com.lenovo.util;
import java.sql.*;
import java.util.List;
public class DBUtil {
//mysql地址
public static final String url = "jdbc:mysql://192.168.246.105:3306/bigdata2004?" +
"useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
//用户名
public static final String username = "root";
//密码
public static final String pwd = "123456";
public static Connection connection; //null
ResultSet resultSet;
static {
//加载驱动器
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//连接mysql
public static void getConnection() {
try {
if (connection == null) {
connection = DriverManager.getConnection(url, username, pwd);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//查询数据库中的数据
public ResultSet executeQuery(String sql, List<Object> params) {
getConnection();
//预加载 select * from user where id = ? and username = ? and passworod = ?
// sql占位符 从1开始计数
try {
PreparedStatement pstmt = connection.prepareStatement(sql);
if (params != null && params.size() > 0) {
for (int i = 0; i < params.size(); i++) {
pstmt.setObject(i + 1, params.get(i));
}
}
resultSet = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
// TODO 释放资源
}