[英]Jaybird CallableStatement not executed until getting output parameter
[英]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.