下午調試了一個調用數據庫存儲過程的片段,居然弄了兩三個小時,下邊小小總結一下。
關鍵代碼:
1??? String sql="CALL pkg_rfts_global.sp_gui_delete_Object(?)";
2????CallableStatement inoutProc=(CallableStatement) conn.prepareCall(sql);
3????inoutProc.registerOutParameter(1,4);
4????inoutProc.setInt(1,9450);
5??? inoutProc.execute();
6????inoutProc.close();
整個過程就如上了,sql就是一個存儲字符串的變量;con是事先已經和數據庫連接好的連接(Connection類);inoutProc就是CallableStatement 類的一個實例;
第一句話就是要執行的命令語句,pkg_rfts_global是包名,sp_gui_delete_Object是存儲過程名,看老師給我們演示時還有在最前面加入登陸用戶名的,這里沒有也通過了,可能是已經登陸的原因。小括號里是變量,這里是在存儲過程中定義的,這個存儲過程就定義了一個變量。第三行是設置變量輸出時的大小,如registerOutParameter方法指定了上述的第一個參數大小為4;第三句話是設置參數,setInt方法設置了第一個參數的整形值為9450;第五句話開始執行這個語句;最后關閉。
出現的問題(因為是第一次用,很弱智的說):
1、沒有加CALL;
2、在語句后面多了一個“;”;
再貼幾句話:
??????????????? cs.registerOutParameter(2, java.sql.Types.INTEGER);
??????????????? cs.registerOutParameter(4, java.sql.Types.VARCHAR);
??????????????? cs.registerOutParameter(10, java.sql.Types.FLOAT);
??????????????? cs.registerOutParameter(20, java.sql.Types.VARCHAR);
cs和inoutProc是一個類型了,這是在定義變量輸出時大小的另外一種方法。