Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 INSERT INTO语句在我的for each循环中不起作用_Java_Sql_For Loop_Jdbc - Fatal编程技术网

Java INSERT INTO语句在我的for each循环中不起作用

Java INSERT INTO语句在我的for each循环中不起作用,java,sql,for-loop,jdbc,Java,Sql,For Loop,Jdbc,我有这样的代码 Let m = 7; for(int i=0, i<m, i++){ con.setAutoCommit(false) PreparedStatement ps = con.prepareStatement("INSERT INTO Numbers VALUES (i, "This is sparta")"); ps.executeUpdate(); con.commit(); con.setAutoCommit(true); } 而不是 Number

我有这样的代码

Let m = 7;

for(int i=0, i<m, i++){
 con.setAutoCommit(false)
 PreparedStatement ps = con.prepareStatement("INSERT INTO Numbers VALUES (i, "This is   sparta")");
 ps.executeUpdate();
 con.commit();
 con.setAutoCommit(true);
}
而不是

Number        Name
_________________________________
1         This is sparta

2         This is sparta

3         This is sparta

4         This is sparta

5         This is sparta

6         This is sparta

7         This is sparta
我哪里出了大错


谢谢

这不是一个预先准备好的语句,即使你让它工作了。你应该使用值占位符 充分利用已编制的报表

con.setAutoCommit(false);

final String value = "This is Xerxes";

PreparedStatement ps = con.prepareStatement("INSERT INTO Numbers VALUES (?,?)");
for (int i=0, i<m, i++){

    ps.setInt(1,i);
    ps.setString(2,value);
    ps.executeUpdate(); 
}
ps.close();

con.commit();

在所有insert语句完成后,您应该将其设置为一次提交

请发布真实代码,您所拥有的无法编译。两条注释。1按预期使用PreparedStatement,创建带有INSERT INTO Numbers值?,?的语句?,?然后绑定这些值。2此查询错误严重,请发布一个不会引发大规模错误的查询。如果您不想发布真实代码,请确保此查询将按照您描述的方式编译并再现您的问题。您好,我一直收到此错误“数据截断:列“Number”的值超出范围”。这是因为它没有创建7条记录,而是创建了一条值为1-7的记录。如何修复此问题?首先删除旧内容;它应该会起作用。也许您的第一个数字字段有一个自动递增字段,但位数有限。那么最好只使用数字INT AUTOINCR,而不限制为1位数字,或者删除AUTOINCR。@Joop感谢您在循环外声明准备好的语句并关闭它:从Java 7开始,您可以尝试PreparedStatement ps=con.pre。。。{for{}catch SQLException e{…}不带关闭。但是,如果您想显示是哪些单个值导致了错误,for循环的内容也必须接收try-catch。如果您使用的是Java6,请使用parseIntn,10。
con.setAutoCommit(false);

final String value = "This is Xerxes";

PreparedStatement ps = con.prepareStatement("INSERT INTO Numbers VALUES (?,?)");
for (int i=0, i<m, i++){

    ps.setInt(1,i);
    ps.setString(2,value);
    ps.executeUpdate(); 
}
ps.close();

con.commit();