下面我来详细讲解如何使用Java JDBC构建简单的数据访问层实例。
1. JDBC概述
Java数据库连接(Java Database Connectivity,简称JDBC),是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,目前最新版是JDBC 4.3。
JDBC API提供了访问多种关系型数据库的标准方法,包括连接数据库、执行SQL语句、处理结果集等。使用JDBC时,需要导入Java SE中的jdbc.jar包。
2. JDBC实现步骤
使用JDBC实现数据访问层主要包括以下步骤:
- 加载JDBC驱动程序
- 获得数据库连接
- 创建Statement对象
- 执行SQL语句
- 处理结果集
- 释放资源
具体实现步骤如下:
//导入包
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
//1. 加载JDBC驱动程序
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("JDBC driver loaded");
} catch (ClassNotFoundException e) {
System.out.println("Failed to load JDBC driver");
e.printStackTrace();
}
Connection conn = null;
Statement stmt = null;
try {
//2. 获得数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");
//3. 创建Statement对象
stmt = conn.createStatement();
//4. 执行SQL语句
String sql = "SELECT * FROM user";
ResultSet rs = stmt.executeQuery(sql);
//5. 处理结果集
while(rs.next()) {
System.out.println(rs.getString("name") + " " + rs.getInt("age"));
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6. 释放资源
try {
if(stmt != null) stmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
上面的代码中,我们使用MySQL数据库作为示例,其他关系型数据库的使用方法基本相同。
3. 示例1
假设我们需要实现用户注册功能,包括插入用户名和密码到数据库中。代码如下:
//导入包
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
//1. 加载JDBC驱动程序
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("JDBC driver loaded");
} catch (ClassNotFoundException e) {
System.out.println("Failed to load JDBC driver");
e.printStackTrace();
}
Connection conn = null;
PreparedStatement pstmt = null;
try {
//2. 获得数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");
//3. 创建PreparedStatement对象
String sql = "INSERT INTO user(name, password) VALUES(?,?)";
pstmt = conn.prepareStatement(sql);
//4. 设置参数
pstmt.setString(1, "Tom");
pstmt.setString(2, "123456");
//5. 执行SQL语句
int result = pstmt.executeUpdate();
System.out.println("Insert count: " + result);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6. 释放资源
try {
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
上面的代码中,我们使用PreparedStatement对象来避免SQL注入问题,还使用了连接池来提高性能。
4. 示例2
下面我们再来看一个示例,假设我们需要实现分页查询功能。代码如下:
//导入包
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
int page = 2;
int pageSize = 10;
//1. 加载JDBC驱动程序
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("JDBC driver loaded");
} catch (ClassNotFoundException e) {
System.out.println("Failed to load JDBC driver");
e.printStackTrace();
}
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//2. 获得数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL&serverTimezone=GMT%2B8", "root", "root");
//3. 创建PreparedStatement对象
String sql = "SELECT * FROM user LIMIT ?,?";
pstmt = conn.prepareStatement(sql);
int start = (page - 1) * pageSize;
pstmt.setInt(1, start);
pstmt.setInt(2, pageSize);
//4. 执行SQL语句
rs = pstmt.executeQuery();
//5. 处理结果集
while(rs.next()) {
System.out.println(rs.getString("name") + " " + rs.getInt("age"));
}
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6. 释放资源
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
上面的代码中,我们使用了LIMIT语句来实现分页查询,其中page和pageSize是用户传递的参数。
总结
以上就是使用Java JDBC构建简单的数据访问层实例的攻略,主要包括了JDBC概述、实现步骤以及两个示例。如有任何问题,欢迎留言讨论。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 使用JDBC构建简单的数据访问层实例详解 - Python技术站