Quitada ブログ RX

2007/05/06(日)13:10

Java で Oracle のストアードプロシージャを実行してみる

IT(160)

仕事関連でどうしても必要になり、特に知りたくはなかったが Java から Oracle のストアードプロシージャを実行して結果をうけとる方法を勉強したので、とりあえず備忘録、備忘録。 それで、いきなり結論からいうと、以下のサイト様が役に立ちました。 JDBC-03 CallableStatementを使う。 というころで、私の場合はためしにこんなストアードプロシージャを作ってみました。 CREATE OR REPLACE PROCEDURE TESTSP (     pSql IN VARCHAR2   , pResult OUT NUMBER   , pSqlCode OUT NUMBER   , pSqlMsg OUT VARCHAR2 ) IS BEGIN   pResult:= 12354;   pSqlCode:= 12345;   pSqlMsg:='12345desuyo'; END; / えっとえっと、1 つの文字列を引数として、決まった 3 つの値を返すというとっても意味のないものです。ぐはぁ。 Java のソースコードは以下のような感じ(赤字になっているJNDI 関連のお作法コードは WebLogic Server を使った場合のもの)。ま、CallableStatement を使いましょうということですね。 import java.util.*; import java.sql.*; import javax.naming.*;     :   Context ctx = null;   Connection conn = null;   CallableStatement cs = null;   Hashtable ht = new Hashtable();   ht.put(Context.INITIAL_CONTEXT_FACTORY,     "weblogic.jndi.WLInitialContextFactory");   ht.put(Context.PROVIDER_URL,"t3://localhost:7001");   try {     ctx = new InitialContext(ht);     javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("[DataSource の JNDI 名]");     conn = ds.getConnection();     conn.setAutoCommit(false);     cs = conn.prepareCall("{call TESTSP(1,?,?,?)}");     cs.registerOutParameter(1,java.sql.Types.INTEGER);     cs.registerOutParameter(2,java.sql.Types.INTEGER);     cs.registerOutParameter(3,java.sql.Types.VARCHAR);     cs.execute();     System.out.println("OutParam 1 =" + cs.getInt(1));     System.out.println("OutParam 2 =" + cs.getInt(2));     System.out.println("OutParam 3 =" + cs.getString(3));   } catch (Exception ex) {     ex.printStackTrace();   } finally {     try {       if (cs != null) cs.close();       if (conn != null) conn.close();     } catch (Exception sqlex){       sqlex.printStackTrace();     }   }

続きを読む

総合記事ランキング

もっと見る