插入sql时返回的数据怎么用java变量来接收? 本帖最后由 limin910 于 2010-10-26 21:44:20 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写 查询语句吧 然后用list接 如果不是那么严谨的话,我会用投机取巧的办法。既然你ID是自增的,那在你插入操作成功后查找最大的主键ID值(就是刚刚插入数据的主键)。应该能明白我的意思吧! 不要用批了,用批实现不了,另外,我测试了,不用批性能也不差的。下面的代码测试过了,可以跑,你看看 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); 恩 我也觉得 其实批不批量是一样的你insert 表前 先max(id) 看最大的id是多少然后insert 后 把大于刚才 的max(id)的 集合查询出来就行了 ResultSet rs = statement.getResultSet(); while (rs.next()) { SeqValue = rs.getInt("nextval"); break; }不行吗? 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命令加到命令列表}ResultSet rs = statement.getGeneratedKeys(); 谢谢3楼的和2楼的还有大家。3楼的方法验证了,插入10000条数据需要8000毫秒左右,不过完全满足我的需求了。我综合了2、3楼的方法,也投机取巧了一次。 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); int khid = 0; for (int i = 0; i < 10000; i++) { statement.setString(1, "zhangSan"); statement2 = connection .prepareStatement("select max(khid) from kehu"); resultSet = statement2.executeQuery(); resultSet.next(); System.out.println(resultSet.getInt(1) + (i + 1)); } connection.commit(); System.out.println("【数据插入完毕,用时:" + (System.currentTimeMillis() - startTime) + "毫秒"); 投机方法只有在一种情况下才可以使用,就是该程序的使用者只有一个人,否则当A插入一条数据的时候B紧跟着插入了一条数据,这样A查出来的MAX值就是B插入产生的NO. 结果liux系统get方式提交中文乱码问题 hibernate注解配置集合映射list 哪位大大给我讲下C3P0读取XML配置文件的问题啊 Extjs如何制作K线图啊急用 action的问题,请指教,非常着急的 JBossAS-4.0.4启动正常,点击 Reinvoke MBean Operation报如错 tomcat发病 。高手helping 求教JAVA作成可以在客户机器(windows)上独立运行的程序完整方法 使用中间件服务器能不能和客户端直接通信? eclipse Tomcat起不来 table变成div+css格式 【开源】发布一个纯JAJA的MP3解码器
下面的代码测试过了,可以跑,
你看看
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);
你insert 表前 先max(id) 看最大的id是多少
然后insert 后 把大于刚才 的max(id)的 集合查询出来就行了
while (rs.next()) {
SeqValue = rs.getInt("nextval");
break;
}不行吗?
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命令加到命令列表}
ResultSet rs = statement.getGeneratedKeys();
3楼的方法验证了,插入10000条数据需要8000毫秒左右,不过完全满足我的需求了。
我综合了2、3楼的方法,也投机取巧了一次。 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);
int khid = 0;
for (int i = 0; i < 10000; i++) {
statement.setString(1, "zhangSan");
statement2 = connection
.prepareStatement("select max(khid) from kehu");
resultSet = statement2.executeQuery();
resultSet.next();
System.out.println(resultSet.getInt(1) + (i + 1));
}
connection.commit();
System.out.println("【数据插入完毕,用时:"
+ (System.currentTimeMillis() - startTime) + "毫秒");