在java中更新firebird数据库时报错如下: 
org.firebirdsql.jdbc.FBResultSetNotUpdatableException: Underlying result set does not contain all columns that form 'best row identifier'. 
at org.firebirdsql.jdbc.FBRowUpdater.getParameterMask(FBRowUpdater.java:252) 
at org.firebirdsql.jdbc.FBRowUpdater.executeStatement(FBRowUpdater.java:548) 
at org.firebirdsql.jdbc.FBRowUpdater.insertRow(FBRowUpdater.java:472) 
at org.firebirdsql.jdbc.AbstractResultSet.insertRow(AbstractResultSet.java:2479) 
下边是程序的部分更新数据库的代码: strSql= "select * from GroupUser where GroupAttr is null"; 
rs = wdb.query(strQuery); rs.moveToInsertRow();//寻找可插入位置,游标指向该位置。 rs.updateString("GroupAttr",strGroupAttr); 
rs.updateString("PassWord",strPassWord); 
rs.updateString("CheckWord",strPassCheck); 
rs.updateDate("RegisterDate",dateNow); 
rs.updateDate("LastAccessDate",dateNow); rs.insertRow(); 就是这个rs.insertRow();时报的错,请高手帮忙! 
另外,我的Statement设置的是可更新的,如下: 
statement= connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);

解决方案 »

  1.   

    是不是驱动不支持?FBResultSetNotUpdatableException 看这个异常
      

  2.   

    驱动是从官网下载的,一共三个jar包,应该没问题吧?
    jaybird-2.1.6.jar
    jaybird-full-2.1.6.jar
    jaybird-pool-2.1.6.jar
      

  3.   

    去看看这里吧。或许你就明白了。
    http://blog.csdn.net/thirtysix1207/archive/2007/09/25/1799800.aspx
      

  4.   

    看了下FBResultSetNotUpdatableException被throw出时的源码,觉得完全不应该被throw出来啊,郁闷,还是没有解决...
    这个就是那个类的源码:
    http://fisheye1.atlassian.com/browse/firebird/client-java/src/main/org/firebirdsql/jdbc/FBRowUpdater.java?r=1.18
    被抛出的就是252这个Exception
    有时也会抛出260的Exception
    看起来好象是没有其中的哪个列导致的,不过确实都有啊
    高手帮忙看下原因
      

  5.   

    试过了,可是还是一样的问题......
    我也怀疑是驱动了,但是驱动包和数据库都是2.0版本的啊,而且是官网下的
    请问谁还有好用的firebird2.0的驱动包啊?分享下吧