gpt4 book ai didi

java - 如何在Java中调用具有多个值的存储过程?

转载 作者:行者123 更新时间:2023-11-30 02:29:08 26 4
gpt4 key购买 nike

我需要从 Java 调用 SQL Server 存储过程。这是存储过程:

 DECLARE @t_certificate v.vt_VidaDollarsCertificates
INSERT INTO @t_certificate VALUES(1,710335,'FFRLODOLAR',363)
INSERT INTO @t_certificate VALUES(1,710335,'FFRLODOLAR05',363)
INSERT INTO @t_certificate VALUES(1,710335,'FFRLODOLAR06',363)
EXEC v.vprdl_CertificateInsert @t_certificate

我所做的是创建一个原始查询,然后使用PreparedStatement 添加信息。

我像这样创建原始查询:

StringBuilder query = new StringBuilder();
query.append(
"DECLARE @t_certificate v.vt_VidaDollarsCertificates;"
+ "INSERT @t_certificate VALUES(?,?,?,?)");
for (int i = 0; i < arrCertificates.size() - 1; ++i) {
query.append(",(?,?,?,?) ");
}
query.append("; EXEC v.vprdl_CertificateInsert @t_certificate");

这是形成的原始查询

DECLARE @t_certificate v.vt_VidaDollarsCertificates;INSERT @t_certificate VALUES(?,?,?,?),(?,?,?,?) ,(?,?,?,?) ; EXEC v.vprdl_CertificateInsert @t_certificate

然后我创建PreparedStatement。

PreparedStatement preparedStmt = con.prepareStatement(query.toString());
for (int i = 0; i < arrCertificates.size(); ++i) {
preparedStmt.setInt(1, arrCertificates.get(i).getCertificateTypeID());
preparedStmt.setInt(2, arrCertificates.get(i).getContratoID());
preparedStmt.setString(3, arrCertificates.get(i).getFolio());
preparedStmt.setInt(4, Integer.parseInt(arrCertificates.get(i).getID()));

}

之后我使用executeUpdate。

preparedStmt.executeUpdate();
ResultSet rs = preparedStmt.getGeneratedKeys();

但是它不起作用,它抛出异常

the value is not set for the parameter number

最佳答案

您似乎为 prepapred 语句设置了错误的索引,因为在所有迭代中您设置了相同的值:

VALUES(?,?,?,?),(?,?,?,?) ,(?,?,?,?)
1 2 3 4 1 2 3 4 1 2 3 4

这似乎不正确,您可以使用:

int j = 1;
for (int i = 0; i < arrCertificates.size(); ++i) {
preparedStmt.setInt(j++, arrCertificates.get(i).getCertificateTypeID());
preparedStmt.setInt(j++, arrCertificates.get(i).getContratoID());
preparedStmt.setString(j++, arrCertificates.get(i).getFolio());
preparedStmt.setInt(j++, Integer.parseInt(arrCertificates.get(i).getID()));
}
<小时/>

因此,对于 3 个输入,它应该为您提供:

VALUES(?, ?, ?, ?),(?, ?, ?, ?) ,(?, ?, ?, ?)
1 2 3 4 5 6 7 8 9 10 11 12

关于java - 如何在Java中调用具有多个值的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44724890/

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