繁体   English   中英

具有多行循环的SQL INSERT

[英]SQL INSERT with loop with multiple rows

我正在尝试使用jdbc将框架数据插入数据库中。

到目前为止,我的代码是:

   Statement st=con.createStatement();
   String sql = "INSERT INTO student (studentid, titleid, forename, familyname, dateofbirth) "
                    + "VALUES (1, 1, 'forename1', 'surname1', '1996-06-03');";

我需要为此创建100个条目,但我不太确定如何去做。 我只需要将学生ID,标题ID,姓氏和姓氏加1,直到填满这些行的100个条目,就不必更改出生日期了。 我问如何为此做一个循环

通用答案-您应该使用PrepareStatement而不是Statement并分批执行。

插入多个条目或执行的常用方法

String sql = "INSERT INTO student (studentid, titleid, forename, familyname, dateofbirth) "
                    + "VALUES (?, ?, ?, ?, ?);";
ps = connection.prepareStatement(SQL_INSERT);
for (int i = 0; i < entities.size(); i++) {
    ps.setString(1, entity.get...());
    ...
    ps.addBatch();
}
ps.executeBatch();

重要的提示:

  1. 为什么要使用PrepareStatement Over语句

  2. SQL注入示例

有两种方法可以做到这一点。 您可以将插入查询放入循环中,也可以将循环放入插入查询中。 我发现更好的方法取决于数据库引擎(但我从未使用过postresql)和要插入的记录数。 您可能会遇到最大查询长度或参数数量等问题。

以下代码示例是ColdFusion,但它旨在显示在查询内部具有循环的一般思想。 您将不得不在Java中编写等效的代码。

<cfquery>
insert into yourtable
(field1
, field2
, etc)
select null
, null
, null
from SomeSmalllTable
where 1 = 2
<cfloop>
union
select <cfqueryparam value="#ValueForField1#">
, <cfqueryparam value="#ValueForField#">
, etc
</cfloop>
</cfquery>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM