[英]Using groovy.sql.Sql.executeInsert() within a Java program
編輯由於新信息而改變問題
我在Java程序中使用Groovy SQL庫,並且在通過executeInsert()函數在Oracle數據庫中插入行時遇到了麻煩。
這是我的Java程序的一部分:
DataSet myds = registry.lookupByNameAndType("myDataSet", DataSet.class);
// Use a stored function to add a row to the database and provide a keyword reference
int[] updateCounts = myds.withBatch(100, new Closure<Object>(this) {
public Object doCall(DataSet ds) {
Integer dupCount = 0;
String sqlString =
"INSERT INTO MY_TABLE " +
"(A_NUMBER_COLUMN) " +
"VALUES " +
"(':input_number')"; // one of the record Map elements
List<Object> params = new ArrayList<Object>();
List<String> keyColumnNames = new ArrayList<String>();
keyColumnNames.add("MY_ID_COLUMN");
for (Map<String, Object>record : incoming) {
try {
List<GroovyRowResult> keys = ds.executeInsert(record, sqlString, keyColumnNames);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
dupCount++;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return dupCount;
};
});
但是,當程序執行時,我收到一條SQL錯誤,提示:
無法執行:INSERT INTO MY_TABLE(A_NUMBER_COLUMN)VALUES(':input_number')因為:無效的列索引
我什至嘗試用一個問號和一個常數替換命名參數“:input_number”,並且每個參數都有相同的無效列索引錯誤。 在Java程序中使用Groovy函數時,看起來好像完全破壞了參數替換。
誰能告訴我這應該如何工作? (而且,不。我沒有選擇直接使用Groovy程序的選擇。)
使用groovy-all-2.4.11.jar和jdk.1.8.0_131
謝謝!
如果您要調用的函數返回一些內容,則必須提供綁定並指定類型,例如:
DataSet myds = registry.lookupByNameAndType("myDataSet", DataSet.class);
// Use a stored function to add a row to the database and provide a keyword reference
int[] updateCounts = myds.withBatch(100, new Closure<Object>(this) {
@SuppressWarnings("unused")
public Object doCall(DataSet ds) {
Integer dupCount = 0;
String sqlString = "{? = call aStoredFunction ( ?, ?, ?, ?, ?, ?, ?, ?, ? )}";
List<Object> params = new ArrayList<Object>();
for (Map<String, Object>record : incoming) {
params.clear();
params.add(Sql.NUMERIC)
params.add(record.get("param1"));
params.add(record.get("param2"));
params.add(record.get("param3"));
params.add(record.get("param4"));
params.add(record.get("param5"));
params.add(record.get("param6"));
params.add(record.get("param7"));
params.add(record.get("param8"));
params.add(record.get("param9"));
try {
sql.call( sqlString, params ) { result -> dupCount = result }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return dupCount;
};
});
經過一段時間的討論之后,我向Groovy User郵件列表提交了一個問題。 原來,我發現了Groovy中的錯誤。 JIRA問題已提交
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.