moveToInsertRow() 方法发生错误的问题!

yllaji 2003-08-20 04:15:21
java返回错误!

javax.servlet.ServletException: JZ0BT: 类型 CONCUR_READ_ONLY 的 ResultSets 不支持 moveToInsertRow() 方法。


我明明设置 ResultSet.CONCUR_UPDATABLE 了:

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

源代码如下:

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs=stmt.executeQuery("SELECT * FROM notes");
rs.moveToInsertRow();
rs.updateString("Title",ntilte);
rs.updateString("Body",body);
rs.updateString("Ndate",ndate);
rs.updateString("Uname",Uname);
rs.insertRow();



============================

如果 直接

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

sql="Insert into notes(Title,Body,Ndate,Uname) values('"+ntilte+"','"+body+"','"+ndate+"','"+Uname+"')";
stmt.executeUpdate(sql);

一点问题都没有……
为什么~~~~~~ 怎么会这样??
...全文
192 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bc_xu_cn_delphi 2003-08-28
  • 打赏
  • 举报
回复
谢谢!
我发现用insertRow方法后,在记录集中是没有新插入的记录,除非
重新刷新一遍,而我所需要的是插入后,立即取相关字段值,如果利用
select语句取Sequence的值,终究有时间差,在一个并发性很高的系统
里是很难保证检索的Sequenc值为InsertRow的值。
其实我只是想像ADO的Result对象的功能,新插入一条记录,能可以马上
取到对应字段的数值,要求应该不算很高,哪位仁兄有过类似经历或解决方法
不妨告知一二,小弟谢了
Wnyu 2003-08-27
  • 打赏
  • 举报
回复
再补充完整对楼主的回答:

问题不是Jdk, 要实现moveToInsertRow(),主要注意的Select语句 。
1.Select语句不能用*,必须用Select A, B, C from table. (A,B, C是要Insert的字段)
2.Select语句只能是单表,不能存在两个或以上的表。
3.updateString的字段必须在Select语句中列出。(如上面, 只能更新或插入A, B, C字段)
4.用ResultSet.CONCUR_UPDATABLE参数建立Statement.
5.Select语句不能使用Order by
6.Select语句必须包含主Key或所有not null的字段
Wnyu 2003-08-27
  • 打赏
  • 举报
回复
To: bc_xu_cn_delphi(孤帆)
我猜你用的是Oracle数据库吧。
多用一次的Select方法来拿Sequence当前的值.
ResultSet rs=stmt.executeQuery("Select <your Sequence>.curr_val into abc from dual"); // 得到Sequence的当前值.
Integer iSeq =0;
iSeq = rs.getInteger("ABC");
iSeq = new Integer(iSeq.intVal() + 1); // 得到Sequence的一下个值.也是InsertRow这后的值
......

bc_xu_cn_delphi 2003-08-27
  • 打赏
  • 举报
回复
具体描述一下:

有两个表t1(id,name),t2(id,old)

t1中的id利用触发器由Sequence生成,是自动增长的

在t1插入记录成功后需要取出插入记录的id值
作为t2插入记录的id字段值
我发现在insertRow()方法,无法取出id值

如果有哪位大侠只读,告知一下,我赶着救命,帮帮忙!

bc_xu_cn_delphi 2003-08-27
  • 打赏
  • 举报
回复
谢谢!
我的记录集有一个自增长的字段,想在insertRow方法,将其取出,
发现每次都是0,这是为什么?哪位兄台再救我一把,不甚感激!
Wnyu 2003-08-26
  • 打赏
  • 举报
回复
问题不是Jdk, 要实现moveToInsertRow(),主要注意的Select语句 。
1.Select语句不能用*,必须用Select A, B, C from table. (A,B, C是要Insert的字段)
2.Select语句只能是单表,不能存在两个或以上的表。
3.updateString的字段必须在Select语句中列出。(如上面, 只能更新或插入A, B, C字段)
4.用ResultSet.CONCUR_UPDATABLE参数建立Statement.

bc_xu_cn_delphi 2003-08-26
  • 打赏
  • 举报
回复
up
我也是如此,死活报错,说记录集只读,哪位大侠帮帮忙
tucw 2003-08-20
  • 打赏
  • 举报
回复
按jsdk1.3中还差rs.moveToCurrentRow();
yllaji 2003-08-20
  • 打赏
  • 举报
回复
不可能吧?

sybase 12.5.1 beta 刚从 sybase 上下的

jconn5.5 刚从 sybase 上下的

tomcat 5.0 刚从 apache 上下的

java2 sdk 14.2 刚从 sun 上下的

不可能吧?? 不支持??
javahui 2003-08-20
  • 打赏
  • 举报
回复
是你的JDBC驱动程序不支持吧,或者是数据库不支持。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧