日期:2014-05-20  浏览次数:20716 次

插入sql时返回的数据怎么用java变量来接收?
我向客户表(kehu.table)内插入一行数据,我需要返回客户的id,id是自增的。返回的这个id我如何用java里的变量来接收呢?

数据库建表语句举例=======================================================

create table kehu(
khid int primary key identity(100000,1), --主键:客户编码
kxingming varchar(30) not null, --客户姓名
)
go
插入语句举例=============================================================

insert into kehu values('zhangSan')--插入数据到表中
go
SELECT IDENT_CURRENT('kehu') --返回该表最后插入的一行数据的自增列值
go
Java语句关键代码举例=========================================================================
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager
.getConnection(
"jdbc:microsoft:sqlserver://localhost:1433;databaseName=xols",
"sa", "sa");
String sql = "insert into kehu values(?) SELECT IDENT_CURRENT('kehu')";
long startTime = System.currentTimeMillis();
statement = connection.prepareStatement(sql);
for (int i = 100; i < 200; i++) {
statement.setString(1,"zhangSan");
statement.addBatch();// 把一个SQL命令加到命令列表
}
statement.executeBatch();// 批量更新
connection.commit();
System.out.println("【数据插入完毕,用时:" + (System.currentTimeMillis() - startTime)
+ "毫秒");==========================================================================================================

请问,我在java中该如何定义变量来接受sql语句返回的这个ID呢?
谢谢

------解决方案--------------------
如果不是那么严谨的话,我会用投机取巧的办法。

既然你ID是自增的,那在你插入操作成功后查找最大的主键ID值(就是刚刚插入数据的主键)。

应该能明白我的意思吧!
------解决方案--------------------
不要用批了,用批实现不了,另外,我测试了,不用批性能也不差的。
下面的代码测试过了,可以跑,
你看看
Java code
            String sql = "set nocount on insert into kehu values(?) SELECT IDENT_CURRENT('kehu') set nocount off";
            long startTime = System.currentTimeMillis();
            PreparedStatement statement = dbconn.prepareStatement(sql);
            ResultSet rs;
            ArrayList ids = new ArrayList();
            for (int i = 100; i < 200; i++) {
                statement.setString(1, "zhangSan");
                rs = statement.executeQuery();
                rs.next();
                ids.add(rs.getInt(1));
            }
            dbconn.commit();
            System.out.println("【数据插入完毕,用时:"
                    + (System.currentTimeMillis() - startTime) + "毫秒");    
            System.out.println("Id list:" + ids);