java.sql.ResultSet如何插入新的记录?(50分)

  • 主题发起人 主题发起人 csz
  • 开始时间 开始时间
C

csz

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚接触java,在往数据库添加记录时遇到以下问题:
sql = "Select * from User";
rs = stmt.executeQuery(sql);
//运行到这里没问题
rs.moveToInsertRow();
//从这里开始出错
rs.updateString(2, "test");

rs.updateString(3, "csz9");

rs.insertRow();
rs.moveToCurrentRow();

编译通过,运行时出错,请问这段代码哪儿有问题,多谢了。。。
 
DFW刷新太快了,help~~
我用insert Sql语句执行成功,但是不想用这种方法
有没有类似Delphi里AdoQuery的Append和update方法?
各位老大,救命~~~
 
需要创建可更新的结果集,增加下面一条语句:
Statement stmt=connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
 
我改了,可是还是不行,大虾请继续help~
 
String update_sql = "update User set name="csz"";
update_stmt.execute(update_sql);
 
xp166您说的办法我知道,我要的不是update,我是要add一条新的记录,不想用insert语句实现
不知道ResultSet是不是不提供这种功能?
 
以下的代码在JBuilder7+MS Sqlserver2000+tomcat下测试通过。
你贴出的代码没有问题,也不要怀疑ResultSet是不是提供这种功能。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url="jdbc:microsoft:sqlserver://yourhostname:1433;DatabaseName=NorthWind";
String user="sa";
String password="topcomputer";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from employees";
ResultSet rs=stmt.executeQuery(sql);
rs.moveToInsertRow();
rs.updateString(2, "kehua");
rs.updateString(3, "gao");
rs.insertRow();
rs.moveToCurrentRow();
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
您的第三个字段内容为:<%=rs.getString(3)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
 
kehua,我用的是Oracle,打开数据表并输出没问题,
可是一调rs.moveToInsertRow();就出错
数据库字段允许为空且没有trigger和其他限制,用insert语句执行能成功。
请继续回答好吗,多谢~
10.5.1 500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.
整个代码如下:
<%@page contentType="text/html;
charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@132.147.0.254:1521:ora8";
String user="csz";
String password="csz";
Connection conn= DriverManager.getConnection(url,user,password);

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

String sql="select * from T_User";

ResultSet rs=stmt.executeQuery(sql);
rs.moveToInsertRow();//开始出错
rs.updateString(2, "logname");
rs.updateString(3, "username");
rs.insertRow();
rs.moveToCurrentRow();
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%><br>
您的第二个字段内容为:<%=rs.getString(2)%><br>
您的第三个字段内容为:<%=rs.getString(3)%><br>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
 
检查一下你的jdbc for Oracle与Oracle的版本是否一致。
 
应该没问题吧,我看了
Oracle的jdbc驱动是:
Oracle JDBC Drivers release 8.1.7
12. The scrollable result set implementation has the following
limitation:
- setFetchDirection() on ScrollableResultSet is not supported.
- refreshRow() on ScrollableResultSetdo
es not support all
combinations of sensitivity and concurrency. The following
table depicts the supported combinations.
Support Type Concurrency
-------------------------------------------------------
no TYPE_FORWARD_ONLY CONCUR_READ_ONLY
no TYPE_FORWARD_ONLY CONCUR_UPDATABLE
no TYPE_SCROLL_INSENSITIVE CONCUR_READ_ONLY
yes TYPE_SCROLL_INSENSITIVE CONCUR_UPDATABLE
yes TYPE_SCROLL_SENSITIVE CONCUR_READ_ONLY
yes TYPE_SCROLL_SENSITIVE CONCUR_UPDATABLE
另外Weblolic7的/weblogic700/server/bin/oci817_8这个目录里有俩dll文件
估计也是驱动,不过没有具体版本信息,从oci817_8的目录名来看,应该就是版本了
以上都没问题啊
补充上面的问题
错误提示是:
对只读结果集的无效操作:moveToInsertRow
难道要用这个才行?
no TYPE_FORWARD_ONLY CONCUR_UPDATABLE
可是不支持啊,哎。。。
多谢kehua的关注,请再帮我看看好吗
 
不知你的开发环境是什么?不过weblogic7的jdbc for Oracle应该是在
/weblogic700/server/ext/jdbc/oracle目录下,有两个目录,一个是817,一个是901
文件名都是class12.zip。如果你用的是oracle8的话,你可将
/weblogic700/server/ext/jdbc/oracle/817/class12.zip加入你的开发环境的classpath
试一试。应该是开发环境的配置问题。
 
我已经加上了,可是提示还是:对只读结果集的无效操作:moveToInsertRow
没办法了,我目前用的还是insert语句来写,字段太多,看着眼睛花。。。:(
不管怎么样,多谢kehua的关注,我新开一个帖子吧,把分给你:)
 
后退
顶部