什么是ResultSet
JDBC通过ResultSet来对查询结果进行封装,ResultSet对象包含一个由查询语句返回的一个表,
这个表包含所有的查询结果。
说明
我们一般只使用next()方法移动指针,遍历结果集,那么我们来看看其他操作吧。
示例
问题描述
小明想找出年龄小于25岁的记录,并将他们的年龄都改为18岁。
解决方案
找出小于25岁的记录比较简单,那如何更改他们的年龄呢?
这里可以对ResultSet结果集进行更新操作。
常量的说明
(1)resultSetType:控制ResultSet的类型。
ResultSet.TYPE_FORWARD_ONLY:该常量控制记录指针只能向前移动。
ResultSet.TYPE_SCROLL_INSENSITIVE:该常量控制记录指针可自由移动,但底层数据的改变不会影响ResultSet的内容。
ResultSet.TYPE_SCROLL_SENSITIVE:该常量控制记录指针可自由移动,但底层数据的改变会影响ResultSet的内容。
(2)resultSetConcurrency:控制ResultSet的并发类型。
ResultSet.CONCUR_READ_ONLY:该常量指示ResultSet只是可读并发模式(默认)
ResultSet.CONCUR_UPDATABLE:该常量指示ResultSet是可更新并发模式
实现代码
import java.sql.*;
public class Test3 {
public static void main(String[] args) throws ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
try {
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "111111");
String sql="SELECT * FROM user WHERE age<?";
PreparedStatement pstmt=
connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
pstmt.setInt(1,25);
ResultSet rs=pstmt.executeQuery();
//将光标移动到此ResultSet对象的最后一行
rs.last();
//获取当前行编号
int num=rs.getRow();
for(int i=1;i<=num;i++){
//将光标移动到此ResultSet对象的给定行
rs.absolute(i);
System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getInt("age"));
//修改指针所指记录,age列的值
rs.updateInt("age",18);
//提交修改
rs.updateRow();
}
rs.close();
pstmt.close();
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}