应该是..这样吧..不过不是返回结果集..rs = st.executeUpdate(strSQL);

解决方案 »

  1.   

    最好不要用UpdateString什么的。
    直接用Sql语句: Insert into...或者:Update ... values...
      

  2.   

    ResultSet是只读的,你怎么对他改变?肯定不可以了
      

  3.   

    ResultSet有这样一个方法是updateString
    但是我在生成这个ResultSet的时候是指定它为updatable的啊~为什么是只读的呢??
      

  4.   

    楼上说的有道理!应该用executeUpdate,要么就用execute,executeQuery里面的SQL语句光是查询的Select语句,不能用Insert,Update,Delete什么的。
    但楼上写的也有问题,executeUpdate返回的是一个int型的变量,不是ResultSet类型,只有executeQuery返回的是ResultSet类型。
      

  5.   

    只读不只读是在Statement生成的时候就指定的当然我在createStatement的时候就制定它是updatable的了当然这个ResultSet就不是只读的了我现在就是想知道,当ResultSet做为参数传递之后是不是就更改了这样的“只读”属性或者说,根本上面的做法就不对,但是如何做才对呢??望大家赐教~
      

  6.   

    我觉得应该是参数的设置问题,可以试一试prepareStatement,具体不清楚
    代码再贴多一点看看
      

  7.   

    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
      

  8.   

    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());
    } }
    上面的有点问题,这个
      

  9.   

    是驱动的问题,不能直接在结果集上修改数据库,建议用executeUpdate(),采取迂回的方式
      

  10.   

    String sql = "select * from SBJ_BALANCE_HISTORY for update";   试试
      

  11.   

    DBAccessMixed dbm = new DBAccessMixed();???
    我覺得你還是沒有設
    ResultSet.CONCUR_UPDATABLE
      

  12.   

    [2004-05-09 14:13:10.124]数据库查询失败:ORA-01002: 读取违反顺序[2004-05-09 14:13:10.124]数据库查询SQL:select * from SBJ_BALANCE_HISTORY for update
    ORA-01002: 读取违反顺序
      

  13.   

    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;
    }
      

  14.   

    select * from SBJ_BALANCE_HISTORY for update 不能执行? 晕,我在pl/sql中试的阿
      

  15.   

    从你的设置上来看是没什么问题,看看驱动是不是不支持这种可以修改的ResultSet。
    你用的是JDK的标准JDBC接口,各个驱动器可能支持也可能不支持,你换一下驱动器,或者告诉我你的驱动包,你的数据源。
    你先不调用rst = BalanceGeneration.generateBalance(rst, 10);,看能不能打印结果。
    情况请告诉我,谢谢!
      

  16.   

    感谢各位的关心,我用的是IBM Studio WebSphere Application Developer
    JDK应该不是标准的JDK而是IBM的JDK,但是我认为问题不应该是出在这里的JDBC驱动用的是ORACLE 9i带的class12.zip应该是jdbc1.2连接用的Driver是oracle.jdbc.driver
      

  17.   

    好像是JDBC2.0还是3.0中才支持可更新的结果集吧!看看有没有新的驱动!
      

  18.   

    http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html
    这个地方有oracle 9i for jdbc下载,试试看
      

  19.   

    A set of updater methods were added to this interface in the JDBC 2.0 API 。
    这是Java API描述的,换一下驱动器看看,应该会解决问题