一个关于ResultSet的问题,大家帮忙啊~~ 应该是..这样吧..不过不是返回结果集..rs = st.executeUpdate(strSQL); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好不要用UpdateString什么的。直接用Sql语句: Insert into...或者:Update ... values... ResultSet是只读的,你怎么对他改变?肯定不可以了 ResultSet有这样一个方法是updateString但是我在生成这个ResultSet的时候是指定它为updatable的啊~为什么是只读的呢?? 楼上说的有道理!应该用executeUpdate,要么就用execute,executeQuery里面的SQL语句光是查询的Select语句,不能用Insert,Update,Delete什么的。但楼上写的也有问题,executeUpdate返回的是一个int型的变量,不是ResultSet类型,只有executeQuery返回的是ResultSet类型。 只读不只读是在Statement生成的时候就指定的当然我在createStatement的时候就制定它是updatable的了当然这个ResultSet就不是只读的了我现在就是想知道,当ResultSet做为参数传递之后是不是就更改了这样的“只读”属性或者说,根本上面的做法就不对,但是如何做才对呢??望大家赐教~ 我觉得应该是参数的设置问题,可以试一试prepareStatement,具体不清楚代码再贴多一点看看 public static void main(String[] args) { try { DBAccessMixed dbm = new DBAccessMixed(); String sql = "select * from SBJ_BALANCE_HISTORY"; ResultSet rst = dbm.query(sql); rst = BalanceGeneration.generateBalance(dbm.query(sql), 10); int i = 1; System.out.println(i + ":" + rst.getString("balance")); while (rst.next()) { i++; System.out.println(i + ":" + rst.getString("balance")); } System.out.println("123"); } catch (Exception e) { System.out.println(e.getMessage()); } }这个就是我最后写的一个运行的main public static void main(String[] args) { try { DBAccessMixed dbm = new DBAccessMixed(); String sql = "select * from SBJ_BALANCE_HISTORY"; ResultSet rst = dbm.query(sql); rst = BalanceGeneration.generateBalance(rst, 10); int i = 1; System.out.println(i + ":" + rst.getString("balance")); while (rst.next()) { i++; System.out.println(i + ":" + rst.getString("balance")); } System.out.println("123"); } catch (Exception e) { System.out.println(e.getMessage()); } }上面的有点问题,这个 是驱动的问题,不能直接在结果集上修改数据库,建议用executeUpdate(),采取迂回的方式 String sql = "select * from SBJ_BALANCE_HISTORY for update"; 试试 DBAccessMixed dbm = new DBAccessMixed();???我覺得你還是沒有設ResultSet.CONCUR_UPDATABLE [2004-05-09 14:13:10.124]数据库查询失败:ORA-01002: 读取违反顺序[2004-05-09 14:13:10.124]数据库查询SQL:select * from SBJ_BALANCE_HISTORY for updateORA-01002: 读取违反顺序 ResultSet.CONCUR_UPDATABLE是在DBAccessMixed 的query方法里面定义的 public ResultSet query(Connection conn, String strSQL) throws SQLException, Exception { Statement st = null; ResultSet rs = null; Vector vecResult = null; try { st = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = st.executeQuery(strSQL); } catch (Exception e) { java.text.SimpleDateFormat fmt = new java.text.SimpleDateFormat( "[yyyy-MM-dd HH:mm:ss.SSS]", new Locale("cn", "CN")); String strErrTime = fmt.format(new java.util.Date()); System.out.println(strErrTime + "数据库查询失败:" + e.getMessage()); System.out.println(strErrTime + "数据库查询SQL:" + strSQL); throw e; } return rs; } select * from SBJ_BALANCE_HISTORY for update 不能执行? 晕,我在pl/sql中试的阿 从你的设置上来看是没什么问题,看看驱动是不是不支持这种可以修改的ResultSet。你用的是JDK的标准JDBC接口,各个驱动器可能支持也可能不支持,你换一下驱动器,或者告诉我你的驱动包,你的数据源。你先不调用rst = BalanceGeneration.generateBalance(rst, 10);,看能不能打印结果。情况请告诉我,谢谢! 感谢各位的关心,我用的是IBM Studio WebSphere Application DeveloperJDK应该不是标准的JDK而是IBM的JDK,但是我认为问题不应该是出在这里的JDBC驱动用的是ORACLE 9i带的class12.zip应该是jdbc1.2连接用的Driver是oracle.jdbc.driver 好像是JDBC2.0还是3.0中才支持可更新的结果集吧!看看有没有新的驱动! http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html这个地方有oracle 9i for jdbc下载,试试看 A set of updater methods were added to this interface in the JDBC 2.0 API 。这是Java API描述的,换一下驱动器看看,应该会解决问题 难道 我这样不能添加 滚动条吗 求一小段代码 把整个文件读取 转换成一行行读取的 非常感谢 线程问题 求教 ubuntu 下的scim 输入法问题 preparedStatement 问题2----很玄乎的问题--喜欢挑战的进来 用Struts+spring+Hibernate写一个用户登陆权限? 郁闷中,我的程序到底怎么啦?求大虾帮我看看 mapinfo+swing实现图与树的互动?? 谁来谈一谈,Java是如何捕获鼠标或者键盘事件的,谢谢 谁有jdk1.3的安装包,请mail我吧,谢谢!!! 为什么运行不了?求救 有什么办法可以增加String的hashcode的值
直接用Sql语句: Insert into...或者:Update ... values...
但是我在生成这个ResultSet的时候是指定它为updatable的啊~为什么是只读的呢??
但楼上写的也有问题,executeUpdate返回的是一个int型的变量,不是ResultSet类型,只有executeQuery返回的是ResultSet类型。
代码再贴多一点看看
try {
DBAccessMixed dbm = new DBAccessMixed();
String sql = "select * from SBJ_BALANCE_HISTORY";
ResultSet rst = dbm.query(sql);
rst = BalanceGeneration.generateBalance(dbm.query(sql), 10);
int i = 1;
System.out.println(i + ":" + rst.getString("balance"));
while (rst.next()) {
i++;
System.out.println(i + ":" + rst.getString("balance"));
} System.out.println("123");
} catch (Exception e) {
System.out.println(e.getMessage());
} }这个就是我最后写的一个运行的main
try {
DBAccessMixed dbm = new DBAccessMixed();
String sql = "select * from SBJ_BALANCE_HISTORY";
ResultSet rst = dbm.query(sql);
rst = BalanceGeneration.generateBalance(rst, 10);
int i = 1;
System.out.println(i + ":" + rst.getString("balance"));
while (rst.next()) {
i++;
System.out.println(i + ":" + rst.getString("balance"));
} System.out.println("123");
} catch (Exception e) {
System.out.println(e.getMessage());
} }
上面的有点问题,这个
我覺得你還是沒有設
ResultSet.CONCUR_UPDATABLE
ORA-01002: 读取违反顺序
throws SQLException, Exception {
Statement st = null;
ResultSet rs = null;
Vector vecResult = null;
try {
st =
conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = st.executeQuery(strSQL);
} catch (Exception e) {
java.text.SimpleDateFormat fmt =
new java.text.SimpleDateFormat(
"[yyyy-MM-dd HH:mm:ss.SSS]",
new Locale("cn", "CN"));
String strErrTime = fmt.format(new java.util.Date());
System.out.println(strErrTime + "数据库查询失败:" + e.getMessage());
System.out.println(strErrTime + "数据库查询SQL:" + strSQL);
throw e;
}
return rs;
}
你用的是JDK的标准JDBC接口,各个驱动器可能支持也可能不支持,你换一下驱动器,或者告诉我你的驱动包,你的数据源。
你先不调用rst = BalanceGeneration.generateBalance(rst, 10);,看能不能打印结果。
情况请告诉我,谢谢!
JDK应该不是标准的JDK而是IBM的JDK,但是我认为问题不应该是出在这里的JDBC驱动用的是ORACLE 9i带的class12.zip应该是jdbc1.2连接用的Driver是oracle.jdbc.driver
这个地方有oracle 9i for jdbc下载,试试看
这是Java API描述的,换一下驱动器看看,应该会解决问题