管理结果集:
JDBC使用ResultSet来封装执行查询得到的查询结果,然后通过移动ResultSet的记录指针来取出结果集的内容。除此之外,JDBC还允许通过ResultSet来更新记录,并提供ResultSetMetaData来获得ResultSet对象的内容。
(1)可以使用absolute() previous(0 afterLast()等方法自由移动记录指针的ResultSet被称为可滚动的结果集
(2)在jdk 1.4之前,默认打开的ResultSet是不可滚动的,必须在创建Statement和PreparedStatement时传入额外的参数。从Java5.0之后,默认打开的ResultSet就是可以滚动的,无需传入参数。
(3)以默认方式打开的ResultSet是不更新的,如果希望创建可更新的ResultSet,则必须在创建Statement和PreparedStatement时传入额外的参数。Connection在创建Statement和PreparedStatement时还可额外传入如下两个参数。
******resultSetType:控制ResultSet的类型。该参数有以下三个值:
ResultSet.TYPE_FORWARD_ONLY 这个常量控制记录指针只能向前移动
ResultSet.TYPE_SCROLL_INSENSITINE 该常量控制记录指针的自由移动,但底层数据的改变不会影响ResultSet的内容
ResultSet.TYPE_SCROLL_SENSITIVE 该常量控制记录指针的自由移动,但\底层数据的改变会影响ResultSet的内容
*****resultSetConcurrency:控制ResultSet的并发 类型,有如下两个值。
ResultSet.CONCUR_READ_ONLY :表示ResultSet是只读的并发模式
ResultSet.CONCUR_UPDATABLE :表示ResultSet是可更新的并发模式
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class ResultSetTest {
String driver;
String url;
String user;
String pass;
public void initParam(String paramFile)
throws Exception
{
//使用Propertics类来加载属性文件
Properties pro=new Properties();
pro.load(new FileInputStream(paramFile));
driver=pro.getProperty(driver);
url=pro.getProperty(url);
user=pro.getProperty(user);
pass=pro.getProperty(pass);
}
public void query(String sql) throws Exception
{
//加载驱动
Class.forName(driver);
Connection conn=DriverManager.getConnection(url, user, pass);
//通过Connection来创建一个PreparedStatement对象,传入控制结果集可滚动,可更新的参数
PreparedStatement pre= conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE
, ResultSet.CONCUR_UPDATABLE);
ResultSet rs=pre.executeQuery();
{
rs.last();
int rowCount=rs.getRow();
for(int i=rowCount;i>0;i++){
rs.absolute(i);
System.out.println(rs.getString(1)+"\t"
+rs.getString(2)+"\t"
+rs.getString(3));
//修改第二列的值
rs.updateString(2, "学生名"+i);
//提交修改
rs.updateRow();
}
}
}
public static void main(String[] args) throws Exception{
ResultSetTest rt=new ResultSetTest();
rt.initParam("mysql.ini");
rt.query("select * from student_table");
}
}