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
//: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
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