===测试类
package com.sql;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class ResultSetDemo { /**
 * @param args
 */
public static void main(String[] args) { String sql = "select * from student order by id";
Connection con = DBUtil.getConn();
try {
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(sql);
int i = 0;
System.out.println("=====开始测获得的所有记录====");
System.out.println("游标下移2条");
rs.absolute(2);
System.out.println("现在共在第:" + rs.getRow() + "行");
rs.last();
System.out.println("现在共又: " +rs.getRow()+"条记录");
rs.moveToInsertRow();
System.out.println("插入一条记录");
rs.insertRow();
System.out.println("插入一条记录");
rs.insertRow();
rs.last();
System.out.println("现在共有 :"+rs.getRow()+"条记录");
rs.deleteRow();
System.out.println("现在共有: "+rs.getRow()+"条记录");
System.out.println("======测试获得的所有记录成功=========");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }}==数据库连接类
package com.sql;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBUtil {  public static  Connection getConn()
 {
 String driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver";
 String uid="sa";
 String password="sa";
 String dbName="CallableStatementTest";
 String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName="+dbName+";";
 Connection con=null;
 try {
Class.forName(driverName);
con=DriverManager.getConnection(url,uid,password);

 } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
 }
}
==表是这样的
student  id int primary key ,
 name varchar(12) ,
 re text 现在是程序运行到insertRow()时产生异常:
=====开始测获得的所有记录====
游标下移2条
现在共在第:2行
现在共又: 6条记录
插入一条记录
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Row insert failed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseImplUpdatableResultSet.executeStatement(Unknown Source)
at com.microsoft.jdbc.base.BaseImplUpdatableResultSet.insertRow(Unknown Source)
at com.microsoft.jdbc.base.BaseResultSet.insertRow(Unknown Source)
at com.sql.ResultSetDemo.main(ResultSetDemo.java:31)我对ResultSet 里面的方法不是很熟悉,哪位能具体点解释么.. insertRow()插入数据时到底插入了什么,怎么操作的? 对数据库的表是否还有什么要求...谢谢!!
等待您的回答...

解决方案 »

  1.   

    insertRow
    void insertRow()
                   throws SQLException将插入行的内容插入到此 ResultSet 对象和数据库中。调用此方法时,光标必须位于插入行上。 抛出: 
    SQLException - 如果发生数据库访问错误;结果集并发性为 CONCUR_READ_ONLY 或在已关闭的结果集上调用此方法;如果在光标不位于插入行上时调用此方法,或者插入行中所有不可为 null 的列中还存在未分配非 null 值的列 
    SQLFeatureNotSupportedException - 如果 JDBC 驱动程序不支持此方法
    从以下版本开始: 
    1.2 
      

  2.   

    要完成对数据库的插入,首先调用moveToInsertRow()移动到插入行,然后调用updateXXX的方法完成对,各列数据的更新,完成更新后和更新操作一样,要写到数据库,不过这里使用的是insertRow(),也要保证在该方法执行之前ResultSet没有离开插入列,否则插入不被执行,并且对插入行的更新将丢失。
      

  3.   

    没用过这个 谢谢啦..我弄出来了 书上的代码,这书真垃圾。没看几页都是错误.误人子弟!!!
    我直接调用的insertRow()。。呵呵 
    给你加分
      

  4.   

    先等等,我代码中好像是先插入数据然后跳到数据最后,再删除数据 
    按上面程序的流程
    我原有数据 3,'c' ,'c' 假如我有数据  1  ,'a' , 'a'
    数据2 ,'b','b'这样操作的结果是3被删除了,1,2数据被保留  
    也就是假如我原来数据库没数据将在deleteRow()时报错,有数据虽然插入了数据 但是操作起来好像是先删除再添加,你能给我解释下么