本教程通过具体示例展示如何在Java应用程序中利用PreparedStatement执行SQL语句,并处理返回的结果集。
本段落主要介绍了Java使用PreparedStatement接口及ResultSet结果集的方法,并结合实例详细分析了这两种技术的相关操作方法与注意事项。
首先展示了一个向数据库添加数据的示例代码:
```java
public static boolean addMember(CompMember member) throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 获取数据库连接
conn = dbUtil.getConnection();
// 编写SQL语句,使用?作为占位符以防止SQL注入攻击
String sql = INSERT INTO comp (name, age, salary) VALUES (?, ?, ?);
// 创建PreparedStatement对象,并设置SQL语句
pstmt = conn.prepareStatement(sql);
// 设置占位符对应的值
pstmt.setString(1, member.getName());
pstmt.setInt(2, member.getAge());
pstmt.setDouble(3, member.getSalary());
// 执行SQL语句,返回受影响的行数
int result = pstmt.executeUpdate();
return result > 0;
} finally {
// 关闭资源
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
}
```
上述代码中首先通过`DbUtil`类获取数据库连接。接着编写了一个SQL插入语句,使用`?`作为占位符以提高安全性并防止SQL注入攻击。接下来创建了PreparedStatement对象,并利用setXXX方法设置相应值给占位符。最后调用executeUpdate()方法执行该SQL命令,若受影响的行数大于0,则添加成功。
另外还说明如何通过ResultSet处理查询结果:
```java
public static List getAllMembers() throws Exception {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 获取数据库连接并创建PreparedStatement对象
conn = dbUtil.getConnection();
pstmt = conn.prepareStatement(SELECT * FROM comp);
// 执行查询,获取结果集
rs = pstmt.executeQuery();
List members = new ArrayList<>();
while (rs.next()) {
int id = rs.getInt(id);
String name = rs.getString(name);
int age = rs.getInt(age);
double salary = rs.getDouble(salary);
CompMember member = new CompMember(id, name, age, salary);
members.add(member);
}
return members;
} finally {
// 关闭资源
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
}
```
在此示例中,创建了ResultSet对象`rs`, 用于存储查询结果。通过遍历每一行数据并从ResultSet获取每列的值来构建CompMember对象,并将其添加到列表。
在实际开发过程中,PreparedStatement提供了一种更安全、高效的方式执行SQL语句;而ResultSet则帮助处理和存储由数据库返回的数据集。这两者是JDBC编程中的重要组成部分,可以提高代码的安全性和可读性。同时需要注意遵循最佳实践,比如使用try-with-resources自动关闭资源以及适当异常处理机制的引入。