INSERT INTO STATEMENT 在我的 for-each 循环中不起作用
Posted
技术标签:
【中文标题】INSERT INTO STATEMENT 在我的 for-each 循环中不起作用【英文标题】:INSERT INTO STATEMENT not working in my for-each loop 【发布时间】:2014-03-22 11:45:05 【问题描述】:我有这样的代码,
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
________________________________
1234567 This is sparta
而不是...
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
我哪里出了大错?
谢谢
【问题讨论】:
请贴出真实的代码,你的代码编译不出来。 两个厘米。 1) 按预期使用PreparedStatement
,使用INSERT INTO Numbers VALUES (?,?)
创建语句,然后绑定值。 2)这个查询非常错误,发布一个不会引发大量错误的查询。
如果您不想发布真实代码,请确保此代码能够按照您描述的方式编译和重现您的问题。
【参考方案1】:
即使你让它工作,这也不是一个准备好的语句。你应该使用值占位符 充分利用 PreparedStatement
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();
您应该在所有插入语句完成后将其设为一次提交
【讨论】:
嗨,我不断收到此错误“数据截断:列的值超出范围,“数字”。这是因为它没有创建 7 条记录,而是创建了一条值为 1-7 的记录。我该如何解决这个问题? 先删除旧内容;它应该工作。也许您有一个用于限制位数的第一个数字字段的自动增量字段。那么最好只使用number INT AUTOINCR
而不限制为 1 位,或者删除 AUTOINCR。
@Joop 感谢您在循环外声明准备好的语句并关闭它:)
从 Java 7 开始,可以使用 try (PreparedStatement ps = con.pre...) for catch (SQLException e) ...
(无需关闭)。但是,如果您想显示导致错误的单个值,则 for 循环的内容也必须接收 try-catch。
在 Java 7 之前,前面的数字使它成为八进制数字,而 008 会出错。如果您使用的是 Java 6,请使用 parseInt(n, 10)
。以上是关于INSERT INTO STATEMENT 在我的 for-each 循环中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
INSERT INTO with VALUES 和 SELECT STATEMENT
cannot insert multiple commands into a prepared statement问题原因及解决办法
MS Access 的 SQL INSERT INTO 语句
在 INSERT INTO 语句中插入值时出现语法错误。 -VB 和 ACCESS 2013