gpt4 book ai didi

java - 将 ArrayList 作为参数从类传递给 StoredProcedure

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:07 26 4
gpt4 key购买 nike

如何将 ArrayList 作为参数从 Java 类传递给 StoredProcedure

我有一个方法,从中调用数据库 StoredProcedure,如下面的代码所示:

 public void insertFileDownload(ArrayList<String> spareaList, ArrayList<String> spcollrtList, ArrayList<String> spmaintRtList, ArrayList<String> spenfRtList) {


if (spareaList != null) {
for (String a : spareaList) {//for Areas
Map<String, Object> param = new HashMap<String, Object>();
param.put("areaName", a);
param.put("collroutesName", null);
param.put("maintrtsName", null);
param.put("enfrtsName", null);

genericDao.sqlQueryWithParameters(" {call sp_addMeterJob(:areaName,:collroutesName,:maintrtsName,:enfrtsName) }", param);
}

} else if (spcollrtList != null) {//for CollectionRoutes

for (String cllRt : spcollrtList) {
Map<String, Object> param = new HashMap<String, Object>();
param.put("areaName", null);
param.put("collroutesName", cllRt);
param.put("maintrtsName", null);
param.put("enfrtsName", null);

genericDao.sqlQueryWithParameters(" {call sp_addMeterJob(:areaName,:collroutesName,:maintrtsName,:enfrtsName) }", param);
}

..........

目前我正在使用 if else 条件 4 次来检查每个传入的数组列表参数,以将值设置为存储过程的参数。

有没有其他更好的方法来避免很多 if else block ?

最佳答案

为什么不将数组映射到 XML 文件中并将其作为参数 (varchar) 传递?这样你就不需要在java中检查空值。然后在 SP 上检索它,将其映射回表,如果参数为空或 xml 中缺少参数,它会自动放入空值:

alter PROCEDURE [dbo].[ProcessArrayXML] @xml varchar(max)
AS
BEGIN
declare @xmlHandler int

exec sp_xml_preparedocument @xmlHandler OUTPUT, @xml

select * into #xmlBorrar
from openxml(@xmlHandler,'param')
WITH (areaName varchar(50) '@areaName',
collroutesName varchar(50) '@collroutesName',
maintrtsName varchar(50) '@maintrtsName',
enfrtsName varchar(50) '@enfrtsName')

--DOSOMETHING
select * from #xmlBorrar

end

如果你调用它:

exec [ProcessArrayXML]  
'<?xml version="1.0" encoding="ISO-8859-1"?><param areaName = "1234" maintrtsName="1030" enfrtsName="1142" collroutesName="1204" />'

您已经获得了一个以参数作为列的表,但是如果您将其中一个参数留在 xml 之外,该列将填充为空值,例如...

exec [ProcessArrayXML]  
'<?xml version="1.0" encoding="ISO-8859-1"?><param collroutesName="1204" />'

关于java - 将 ArrayList 作为参数从类传递给 StoredProcedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16607377/

26 4 0