使用jtds1.2+tomcat5.5.16+sql server2000,数据库连接使用的datasource没有问题,查询也没有问题,但是使用updateInt时就报ResultSet is read only的异常,代码如下:
Statement stmtbh = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rsbh = stmtbh.executeQuery("select * from docxlh where xlhid = '" + djbs + "'");
if(rsbh.next()){
rsbh.updateInt("xlhvalue", oldvalue + 1);
rsbh.updateRow();
}else{
rsbh.moveToInsertRow();
rsbh.updateString("xlhid", djbs);
rsbh.updateInt("xlhvalue",1);
rsbh.insertRow();
}我看资料只要在createStatement时设置ResultSet.CONCUR_UPDATABLE就可以了,不知道我哪写的有问题?劳驾各位达人指点迷津。

解决方案 »

  1.   

    要执行update,delete,insert用executeUpdate 而不是executeQuery
    java 1.5API:executeQuery
    ResultSet executeQuery(String sql)
                           throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。 参数:
    sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句 
    返回:
    包含给定查询所生成数据的 ResultSet 对象;永远不能为 null 
    抛出: 
    SQLException - 如果发生数据库访问错误或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容--------------------------------------------------------------------------------executeUpdate
    int executeUpdate(String sql)
                      throws SQLException执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。 参数:
    sql - SQL INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句 
    返回:
    INSERT、UPDATE 或 DELETE 语句的行计数;或者 0,表示不返回任何内容的 SQL 语句 
    抛出: 
    SQLException - 如果发生数据库访问错误或者给定的 SQL 语句生成 ResultSet 对象
      

  2.   

    我执行的是select,不是INSERT、UPDATE 或 DELETE这样的句子。在java API的ResultSet的帮助里面有我那样的用法。
      

  3.   

    if(rsbh.next()){
    rsbh.updateInt("xlhvalue", oldvalue + 1);
    rsbh.updateRow();
    }else{
    rsbh.moveToInsertRow();
    rsbh.updateString("xlhid", djbs);
    rsbh.updateInt("xlhvalue",1);
    rsbh.insertRow();
    }
    那你这段代码不是在写数据库吗?
    如果你用的只是rsbh = stmtbh.executeQuery("select * from docxlh where xlhid = '" + djbs + "'");
    这个只能对数据库进行读操作,返回的也是记录集。应该用executeUpdate()才可以写入,返回的是操作完成所影响的记录条数。
      

  4.   

    楼上的兄弟,你可以看看java的api帮助,我这样写都是有据可循的,而且我以前用的微软的jdbc驱动的时候没有这个问题,问题是在换了jtds驱动之后出现的。
      

  5.   

    conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    TYPE_SCROLL_INSENSITIVE,不支持ResultSet直接更新的。
      

  6.   

    确实TYPE_SCROLL_SENSITIVE不行,换成TYPE_FORWARD_ONLY就可以了