簡體   English   中英

從Callablestatement獲取參數值

[英]Getting parameter values from Callablestatement

我的應用程序中有很多存儲過程調用,我們正在使用可調用語句。 有時我們需要調試傳遞給存儲過程的參數,除了編寫代碼來打印所有來自實體對象的值外,沒有簡單的方法。

因此,我試圖創建一個通用函數,該函數將接收可調用語句簽名以及執行后的可調用語句對象,以及已執行的SQL並在日志中打印以進行調試。 我編寫了以下代碼,但在開關案例1的cs.getString上引發了sql異常“參數類型無效”。

在這里,參數類型是從CS元數據中檢索到的1,根據Javadoc ,常數1是CHAR,應映射為Java中的字符串。 甚至我用於此存儲過程的實際set參數也使用String,它工作正常,那么為什么getString失敗並出現此異常?

我正在使用AS400驅動程序。

        StringBuffer sb = new StringBuffer("{ call ").append(storProcName)
                .append(" (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) }");
        cs = connection.prepareCall(sb.toString());
        // Get and set all parameters
        cs.executeUpdate();
        ParameterMetaData paramd = cs.getParameterMetaData();
        int index, type;
        for (int i = 1; i < paramd.getParameterCount(); i++) {
            type = paramd.getParameterType(i);
            index = sb.indexOf("?");
            if (paramd.getParameterMode(i) == ParameterMetaData.parameterModeIn) {
                switch (type) {
                case 1:
                    sb = sb.replace(index, index + 1, "'" + cs.getString(i)
                            + "'");
                    break;
                }
            }
        }

在上面的示例中,只能在輸出參數上調用getString()方法。

您是否嘗試過使用驅動程序的跟蹤功能來顯示參數值? 如果您使用的是工具箱驅動程序,則可以在以下位置找到有關跟蹤的信息:
http://www-01.ibm.com/support/docview.wss?uid=nas8N1018744

如果使用的是本地JDBC驅動程序,那么可以在以下位置找到有關跟蹤的信息: http : //www-01.ibm.com/support/docview.wss?uid=nas8N1019479

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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