Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以批处理方式从MySQL中检索多行的自动增量值_Java_Mysql_Jdbc_Auto Increment_Autocommit - Fatal编程技术网

Java 以批处理方式从MySQL中检索多行的自动增量值

Java 以批处理方式从MySQL中检索多行的自动增量值,java,mysql,jdbc,auto-increment,autocommit,Java,Mysql,Jdbc,Auto Increment,Autocommit,有一个主键为id int auto\u increment的mysql表, 我需要使用多个insert语句批量插入多行,禁用autocommit,如下所示: SET autocommit=0; INSERT INTO dummy(NAME, `size`, create_date) VALUES('test', 1, NOW()); INSERT INTO dummy(NAME, `size`, create_date) VALUES('test', 2, NOW()); COMMIT; 是否

有一个主键为
id int auto\u increment
的mysql表, 我需要使用多个
insert
语句批量插入多行,禁用
autocommit
,如下所示:

SET autocommit=0;
INSERT INTO dummy(NAME, `size`, create_date) VALUES('test', 1, NOW());
INSERT INTO dummy(NAME, `size`, create_date) VALUES('test', 2, NOW());
COMMIT;
是否可以获取每个生成的id,而不仅仅是最后一个id

如果是,每个id是何时生成的,以及如何通过
jdbc
获取所有id


Thx.

如果您想通过JDBC检索自动增量密钥,您需要使用JDBC功能(
返回生成的密钥
.getGeneratedKeys()
),如下所示:

try(Connection conn=DriverManager.getConnection(myConnectionString,“root”,“beer”)){
try(语句st=conn.createStatement()){
圣执行(
“创建临时表虚拟(”+
`id`INT自动递增主键,'+
“`NAME`VARCHAR(50),”+
“`size`INT,”+
“`create_date`DATETIME”+
")");
}
连接设置自动提交(错误);
System.out.println(“自动提交关闭”);
String sql=“插入虚拟值('test',?,NOW())”;
try(PreparedStatement ps=conn.PreparedStatement(
sql,
PreparedStatement.返回\u生成的\u键){
//第一批
ps.setInt(1,1);//`size`=1
ps.addBatch();
ps.setInt(1,2);/`size`=2
ps.addBatch();
ps.executeBatch();
System.out.println(“第一批执行。创建了以下自动增量值:”);
try(ResultSet rs=ps.getGeneratedKeys()){
while(rs.next()){
System.out.println(rs.getInt(1));
}
}
try(语句st=conn.createStatement()){
sql=“从虚拟中选择计数(*)作为n”;
try(ResultSet rs=st.executeQuery(sql)){
rs.next();
System.out.println(String.format(“该表包含%d行)”,rs.getInt(1));
}
}
连接回滚();
系统输出打印(“事务回滚”);
try(语句st=conn.createStatement()){
sql=“从虚拟中选择计数(*)作为n”;
try(ResultSet rs=st.executeQuery(sql)){
rs.next();
System.out.println(String.format(“该表包含%d行)”,rs.getInt(1));
}
}
//第二批
ps.setInt(1,97);/`size`=97
ps.addBatch();
ps.setInt(1,98);/`size`=98
ps.addBatch();
ps.setInt(1,99);/`size`=99
ps.addBatch();
ps.executeBatch();
System.out.println(“第二批执行。创建了以下自动增量值:”);
try(ResultSet rs=ps.getGeneratedKeys()){
while(rs.next()){
System.out.println(rs.getInt(1));
}
}
}
try(语句st=conn.createStatement()){
sql=“从虚拟中选择计数(*)作为n”;
try(ResultSet rs=st.executeQuery(sql)){
rs.next();
System.out.println(String.format(“该表包含%d行)”,rs.getInt(1));
}
}
}
。。。它生成以下控制台输出:

自动提交已关闭。
第一批执行。创建了以下自动增量值:
1.
2.
该表包含2行。
事务回滚。该表包含0行。
第二批执行。创建了以下自动增量值:
3.
4.
5.
该表包含3行。

非常好的示例,+1用于在示例查询中包含表创建。