JAVA呼び出しデータベースストレージプロセス

16381 ワード

次に、ORACLEデータベース・ストレージ・プロシージャに対するJAVAの呼び出しを示します.
        
ConnUtils接続ツールクラス:接続の取得、リソースの解放

  
package com.ljq.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
*
*
* ConnUtils final
*
*
@author jiqinlin
*
*/
public final class ConnUtils {
private static String url = " jdbc:oracle:thin:@localhost:1521:orcl " ;
private static String user = " test " ;
private static String password = " test " ;

/**
* static
*/
private ConnUtils() {
}

// ( )
static {
try {
Class.forName(
" oracle.jdbc.driver.OracleDriver " );
}
catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}

/**
* Connection
*
*
@return
*
@throws SQLException
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}

/**
*
*
*
@param rs
*
@param st
*
@param conn
*/
public static void free(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null )
rs.close();
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
try {
if (st != null )
st.close();
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
if (conn != null )
try {
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

            
参照付きストアド・プロシージャ・コードを作成するには、次の手順に従います.

  
--
CREATE OR REPLACE PROCEDURE stu_proc(v_name OUT VARCHAR2 ) AS
BEGIN
SELECT o.sname INTO v_name FROM student o where o.id = 2 ;
END ;

        
Javaを使用してパラメータ付きストレージ・プロシージャを呼び出す

  
package com.ljq.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

public class ProceTest {

public static void main(String[] args) throws Exception {
Connection conn
= null ;
CallableStatement statement
= null ;
String sql
= " {call stu_proc(?)} " ;
try {
conn
= ConnUtils.getConnection();
statement
= conn.prepareCall(sql);
statement.registerOutParameter(
1 , Types.VARCHAR);
statement.executeUpdate();
// :lisi
String sname = statement.getString( 1 );
System.out.println(sname);
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
ConnUtils.free(
null , statement, conn);
}
}

}

            
アクセス許可付きストアド・プロシージャ・コードの作成

  
--
CREATE OR REPLACE PROCEDURE stu_proc(v_id IN NUMBER, v_name OUT VARCHAR2) AS
BEGIN
SELECT o.sname INTO v_name FROM student o where o.id
= v_id;
END;

          
JAVAを使用して帯域出入り参照ストレージ・プロシージャを呼び出す

  
package com.ljq.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

public class ProceTest {

public static void main(String[] args) throws Exception {
Connection conn
= null ;
CallableStatement statement
= null ;
String sql
= " {call stu_proc(?, ?)} " ;
try {
conn
= ConnUtils.getConnection();
statement
= conn.prepareCall(sql);
statement.setInt(
1 , 1 );
statement.registerOutParameter(
2 , Types.VARCHAR);
statement.executeUpdate();
// :zhangsan
String sname = statement.getString( 2 );
System.out.println(sname);
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
ConnUtils.free(
null , statement, conn);
}
}

}