学习之路3----ResultSet可滚动和可更新的结果集

来源:互联网 发布:人丑还颜控 知乎 编辑:程序博客网 时间:2024/05/16 13:02
    今晚捣腾了一下关于ResultSet有关的知识,下面就是网上加上自己的总结。。
    要让ResultSet可以滚动个和更新,必须在创建Statement对象的时候使用下面的方式指定对应的参数:
Statement stmt = conn.createStatement(type, concurrency);
对于PreparedStatement,使用下面的方式指定参数:
PreparedStatement pstmt = conn.prepareStatement(sql, type, concurrency);
其中,type表示ResuleSet的类型,而concurrency表示是否可以使用ResuleSet来更新数据库。
type和concurrency的取值以及含义:
    ResultSet.TYPE_FORWARD_ONLY - 结果集不能滚动,这事默认值
    ResultSet.TYPE_SCROLL_INSENSITIVE - 结果集可以滚动,但ResuleSet对数据库中发送的数据改 变不敏感;
    ResultSet.TYPE_SCROLL_SENSITIVE -  结果集可以滚动,并且ResuleSet对数据库中发生的改变敏感
    ResultSet.CONCUR_READ_ONLY - 只读结果集,不能用于更新数据库;
    ResultSet.CONCUR_UPDATABLE - 可更新结果集,可以用于更新数据库;
    当使用TYPE_SCROLL_INSENSITIVE或者TYPE_SCROLL_SENSITIVE来创建Statement对象时,可以使用ResultSet 的 first()/last()/beforeFirst()/afterLast()/relative()/absolute()等方法在结果集中随意前后移动。
提示:即使使用了CONCUR_UPDATABLE参数来创建Statement,得到的记录集也并非一定是“可更新的”,如果你的记录集来自于合并查询,即该查询的结果来自多个表格,那么这样的结果集就可能不是可更新的结果集。可以使用ResuleSet类的getConcurrency()方法来确定是否为可更新的的结果集。如果结果集是可更新的,那么可使用ResultSet的updateRow(),insertRow(),moveToCurrentRow(),deleteRow(),cancelRowUpdates() 等方法来对数据库进行更新。
<span style="color:#494949;font-weight: bold;">String url="jdbc:mysql://localhost:3306/first";String username="root";String password="root";//注册驱动Class.forName("com.mysql.jdbc.Driver");//获得与数据库的连接Connection conn=DriverManager.getConnection(url,username,password);//获得用于向数据库发送sql的 statement         // Statement st= (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);   当把这句话注释掉,就会有下面的错误Statement st= (Statement) conn.createStatement();        //向数据库发送sqlString sql="select name,id  from UserTest2";ResultSet rs=  st.executeQuery(sql);rs.absolute(2);rs.updateString("name", "James");rs.updateRow();System.out.println(rs.getString(1));while(rs.next()){System.out.println(rs.getObject("id"));System.out.println(rs.getObject("name"));  }rs.close();st.close();conn.close();</span>
错误信息:com.mysql.jdbc.NotUpdatable: Result Set not updatable.
当有这句话时(
Statement st= (Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
),但是表单没有主键,会出现这句错误
错误信息:com.mysql.jdbc.NotUpdatable: Result Set not updatable (referenced table has no primary keys)
不错的一篇文章   相关讨论
0 0