gpt4 book ai didi

java - 如何在一条语句中将多行插入到 DB2 中?

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:41 25 4
gpt4 key购买 nike

我正在使用 Java 和 jdbc 驱动程序建立与 DB2 数据库的连接。我正在尝试使用单个语句将多行插入表中。

下面是我的代码:

 public void createResources(List<Resources> addedResources)
throws SQLException{

Connection conn = null;
PreparedStatement statement = null;
int i = 0;

String values = "INSERT INTO GROUPS (GROUP_NAME, ENTRY_NAME,
ENTRY_TYPE, LAST_REQ, CREATE_BY, REQ_BY, LAST_CHANGED, LAST_REQ_TIME) VALUES
" + System.getProperty("line.separator");

while(i < addedResources.size()){

Timestamp LAST_CHANGED =
Timestamp.valueOf(addedResources.get(i).getLAST_CHANGED().trim());
Timestamp LAST_REQ_TIME =
Timestamp.valueOf(addedResources.get(i).getLAST_REQ_TIME().trim());

values = values + "('" +
addedResources.get(i).getGROUP_NAME().trim() + "', '" +

addedResources.get(i).getENTRY_NAME().trim() + "', '" +

addedResources.get(i).getENTRY_TYPE().trim() + "', '" +

addedResources.get(i).getLAST_REQ().trim() + "', '" +

addedResources.get(i).getCREATE_BY().trim() + "', '" +

addedResources.get(i).getREQ_BY().trim() + "', '" +
LAST_CHANGED + "', '" +
LAST_REQ_TIME + "')," +
System.getProperty("line.separator");


i = i + 1;
}
values = values.substring(0,values.trim().length()-1);
Log(Integer.toString(values.length()));
Log(values);

try {

// Get the DB connection
conn = this.ds.getConnection();
conn.setAutoCommit(false);

// Prepare the statement and populate with data
statement = conn.prepareStatement(values);



// Perform the INSERT operation
statement.executeUpdate();

//Commit the changes
conn.commit();
Log("Employee Successfully Added!");
}
finally{


// Any exceptions will be propagated

// Close database objects, regardless of what happened
if ( statement != null ) {
statement.close();
}
if ( conn != null ) {
conn.close();
}

}



}

总而言之,我有一个循环,它迭代列表中的对象并延长插入语句,直到它包含 ArrayList 中的所有行。然后,当循环完成时,我清理字符串的末尾,并尝试执行该语句。

以下是执行该方法时查询语句的示例:

INSERT INTO GROUPS (GROUP_NAME, ENTRY_NAME, ENTRY_TYPE, LAST_REQ, CREATE_BY, 
REQ_BY, LAST_CHANGED, LAST_REQ_TIME) VALUES
('JOHN', 'TEST1', 'FILE', 'N/A', 'SSDP071', 'N/A', '2018-09-17
19:36:34.004', '2018-09-17 19:36:34.004'),
('JOHN', 'TEST2', 'FILE', 'N/A', 'SSDP071', 'N/A', '2018-09-17
19:36:37.771', '2018-09-17 19:36:37.771'),
('JOHN', 'TEST3', 'FILE', 'N/A', 'SSDP071', 'N/A', '2018-09-17
19:36:42.021', '2018-09-17 19:36:42.021')

我的代码尝试执行并抛出以下错误:

[9/17/18 19:36:42:834 GMT] 00000557 SystemOut O com.ibm.db2.jcc.am.SqlSyntaxErrorException:[jcc][50053][12311][4.22.37] T2zOS 异常:[jcc][T2zos]T2zosPreparedStatement.readPrepareDescribeOut put_:nativePrepareInto:1583:DB2 引擎 SQL 错误,SQLCODE = -104,SQLSTATE = 42601,错误标记 = ,;FOR NOT ATOMIC ERRORCODE=-104,SQLSTATE=42601

我的错误标记是一个逗号,我不确定它指的是哪个。有没有办法在 DB2 表中插入多行?帮助将不胜感激!

最佳答案

您可以使用批处理语句来代替:

String values = "INSERT INTO GROUPS " +
"(GROUP_NAME,ENTRY_NAME,ENTRY_TYPE,LAST_REQ,CREATE_BY,REQ_BY,LAST_CHANGED,LAST_REQ_TIME) " +
"VALUES (?,?,?,?,?,?,?,?)";

// ...

statement = conn.prepareStatement(values);

// ...

while(i < addedResources.size()){
statement.setString(addedResources.get(i)).getGROUP_NAME().trim());
statement.setString(addedResources.get(i)).getENTRY_NAME().trim());

// ...

statement.addBatch();
}
statement.executeBatch();

关于java - 如何在一条语句中将多行插入到 DB2 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com