MS-SQL 2000 + J2SDK 1.4.2   sql="select [no],sendId,recvId,message,sendDate,sendTime,roomId from ChatRecord where [no] is null";
  stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); //CONCUR_READ_ONLY
  rs=stmt.executeQuery(sql); 
  rs.moveToInsertRow();
  rs.updateString(2, "279332");
  rs.updateString(3, "ALL");
  rs.updateString(4, "信息内容测试");
  rs.updateString(5, "20050427");
  rs.updateString(6, "141500000");
  rs.updateString(7, "373");
  rs.insertRow();
  //新增结束后显示该自动编号的值
  rs.moveToInsertRow();//估计是这一句跳到刚才新增的那条记录上
  out.println("新增记录的ID是:"+rs.getString("no")+"<br>");
  rs.close();
  stmt.close();我试了 rs.first(),last().moveToCurrentRow();
总是异常 java.lang.NullPointerException 
请大侠们指导,如何取得自动编号字段,新增记录后该字段的值

解决方案 »

  1.   

    使用ms sql自带的系统变量@@IDENTITY那么语句修改成sql="select @@IDENTITY as i,[no],sendId,recvId,message,sendDate,sendTime,roomId from ChatRecord where [no] is null";
      

  2.   

    按楼上大侠的做法,
      sql="select @@IDENTITY as i,sendId,recvId,message,sendDate,sendTime,roomId from ChatRecord where [no] is null";
      stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); //CONCUR_READ_ONLY
      rs=stmt.executeQuery(sql); 
      rs.moveToInsertRow();
      rs.updateString(2, "279332");
      rs.updateString(3, "ALL");
      rs.updateString(4, "信息内容测试");
      rs.updateString(5, "20050427");
      rs.updateString(6, "141500000");
      rs.updateString(7, "373");
      rs.insertRow();
      //新增结束后显示该自动编号的值
      rs.first();
      out.println("新记录的值:"+rs.getString("i"));还是出错 java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position. 
    或java.lang.NullPointerException
      

  3.   

    看了一下你的rs操作
    比较混乱,呵呵update之后怎么还有insert操作?
      

  4.   

    如果数据库不支持@@identity之类的操作, 可以试着这样:确保表中有一个不允许重复记录的索引字段, 在插入完一条记录以后, 再按照该索引字段的值取得ID字段的值, 因为这个字段不允许重复, 所以能确保取出的ID字段是正确的.
      

  5.   

    其实我就是想在数据表中新增一条记录,然后取到这条记录的自动编号字段no的值
    类似ASP的做法:
    rs.open "select * from ChatRecord where [no] is null",conn,3,3
    rs.addnew
    rs("sendId") = "279332"
    ..
    rs.update..
    response.write "该记录的序号是:"&rs("no")
      

  6.   

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); //CONCUR_READ_ONLY
      rs=stmt.executeQuery(sql); 
      rs.moveToInsertRow();
      rs.updateString(2, "279332");
    ...
      rs.updateString(7, "373");
      rs.insertRow();
    rs.close();
    sql="SELECT IDENT_CURRENT('ChatRecord')";
    rs = stmt.executeQuery(sql); 
    newid = rs.getInt(1);
      

  7.   

    另外,新增数据的时候还是比较喜欢用PrepareStatement
      

  8.   

    搞定了,用楼上soloxiao(红色孤独)的方法