簡體   English   中英

在Java程序中使用groovy.sql.Sql.executeInsert()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM