Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·Tomcat5.5.9的安装配置
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·hibernate配置笔记
·构建Linux下IDE环境--Eclipse篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·AOP编程入门--Java篇
·创建文件夹和文件的java代码范例
·Java常见面试题(含答案)
·Java编写的计算器程序及源代码

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
JDBC中ResultSet的修改

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

JDBC的ResultSet对象,一般用法中update和select是由独立的Statement来完成。

尝试了一下直接update结果集。数据库oracle9i,驱动classes12.jar

Connection con = ds.buildConnection();

PreparedStatement smt = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
           
            ResultSet rs = smt.executeQuery();
            while(rs.next()){
                rs.updateString("name","test"); rs.updateRow();
            }

分别使用不同的sql:

String sql = "select a.name,b.id from user a,user_employee b where a.id = b.user_id";

这样的做法会抛出异常,rs这个时候是只读的。

String sql = "select a.name from user a";

单表操作的时候没有问题。

String sql = "select * from user"

用*的方式有问题,rs只读。

再尝试一种方式:

String sql = "select id+id1 mycol,name from user";

修改一下update语句:

rs.updateInt("aa",1);

这个时候,rs仍然保持是updatable,但是这句话却会引起一个异常:

java.sql.SQLException: ORA-01733: 此处不允许虚拟列


 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

 at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)

  。。。。。。

当然这一列通过dbmeta来获取也是readonly的。

总结一下,基本上,是单表的,非虚列,非通配符的statement可以被修改,而其他则不行。

只在jdk文档中找到了一段话是和ResultSet相关的:

A default ResultSet object is not updatable and has a cursor that moves forward only. Thus, you can iterate through it only once and only from the first row to the last row. It is possible to produce ResultSet objects that are scrollable and/or updatable. The following code fragment, in which con is a valid Connection object, illustrates how to make a result set that is scrollable and insensitive to updates by others, and that is updatable. See ResultSet fields for other options.

       Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
       // rs will be scrollable, will not show changes made by others,
       // and will be updatable
没有找到更加具体全面的说明,有篇文章
(http://www.zhuoda.org/blog3/article.jsp?blogid=1681&id=1833)说DB2 Everyplace不支
持CONCUR_UPDATABLE类型的结果集,还有很早以前用sybase的时候,sybase的游标类型支持也是有些
问题的,不知道哪里能找到相关方面的比较全面的文章,有谁知道,希望留在我的blog上,先谢了。



相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有