看到以前的几篇帖子,有人回答是链接方式有问题,我用的是oracle.jdbc.......高不定,faint.

解决方案 »

  1.   

    1、一个例子
    //:SqlServerJdbcDirect.java
    import java.sql.*;public class SqlServerJdbcDirect {
    public static void main(String[] args){
      String dbUrl="jdbc:microsoft:sqlserver://tsc:1433;user=sa;password=mdzly109;DatabaseName=NorthWind";
    Connection con;
    Statement stmt;
    String user;
    ResultSet result=null;

    try{
      //使用MS提供的JDBC类。需要下载SQL Server的JDBC库。
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    }catch(ClassNotFoundException ex){
    ex.printStackTrace();
    } try{
        //简单的使用
        con = DriverManager.getConnection(dbUrl);          
          stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
            result=stmt.executeQuery("select * from Region");
        while (result.next()){        
           System.out.println(result.getInt(1)+"   "+result.getString(2));
           //由于该表的第一个字段是自动增量,不许更新,否则有异常
           //SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can not update, 
           //the specified column is not writable.
           //result.updateInt(1,result.getInt(1)+1);
           //更新的一个示例
           result.updateString(2, "tangshancheng"+result.getString(2)); 
               result.updateRow(); // updates the row in the data source
          }         
          con.close();
        }catch(SQLException ex){
    System.err.println("SQLException: " + ex.getMessage());
    }
    }
    }
    2、不知道你在if (rs.next()) { ..... }中进行了什么操作。
    如果你进行了update操作的话,那你需要检查你的表定义了。
    我用的是SQL Server2000
      

  2.   

    如果对不可修改的记录值进行修改,那当然有问题。你在更改记录之后,使用rs.update()或是updateRow(),新的值就会被保存到数据库,只要没调用update(),就可以使用previous()把数据恢复。
      

  3.   

    java.sql.SQLException: 对只读结果操作无效:updateString
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
    at oracle.jdbc.driver.BaseResultSet.updateString(BaseResultSet.java:220)
    at oracle.jdbc.driver.OracleResultSet.updateString(OracleResultSet.java:2581)
    at myApp(xxx)我估计是不是在oracle的jdbc在作怪。
    注意到tangshancheng(98007)提供的代码中,无论是get还是update都是用的是字段的序(例如:1,2,3),我使用的是字段名,在读方面是没有问题。
      我还注意到:当我createStatement中第一个参数指定为:TYPE_SCROLL_INSENSITIVE时,读取的数据内容就不正常了。faint too. 原来rs.getString("STATUS").equals("1"),返回是true,即当前纪录的status值为1(char),后来返回为false,跟踪擦看了一下,发现好像是对象的地址,要不就是Encode吗,有点长的东东,谁能解释一下?
      BTW:我用的是Oracle 8i
      

  4.   

    我现在换了一种解决的方式:使用PrepareStatement,用Update SQL,更新就没有问题。不知道tangshancheng(98007)所说的“操作的表的字段是可以更新的吗”指的是物理上的表吗?用update没有问题,是否就是说表可以更新?  BTW: 顺便问一下,ResultSet不关闭的话,是不是一直占用数据库的资源?Statement呢?connection呢?