Oracle數據庫連接、存儲過程及調用
1. 定義一個存儲過程
create or replace procedure getuser(eid in number, na out varchar, em out varchar)
as
begin
select username, email into na, em from T_USER where userid = eid;
dbms_output.put_line(na);
end;
2. 應用程序連接數據庫
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 連接oracle數據庫工具類
* @author 賓桀鋒
* @date 2017年8月13日
*/
public class JDBCUtils {
private static String driver = "oracle.jdbc.OracleDriver";
private static String url = "jdbc:oracle:thin:@192.168.2.152:1521:orcl";
private static String username= "binjf";
private static String password = "123456";
//注冊數據庫的驅動
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
//獲取數據庫連接
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//釋放數據庫的資源
public static void release(Connection conn, Statement st, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
st = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
}
3. 調用存儲過程
package oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import oracle.jdbc.internal.OracleTypes;
import org.junit.Test;
import utils.JDBCUtils;
/**
* 測試存儲過程類
* @author 賓桀鋒
* @date 2017年8月13日
*/
public class TestProcedure {
@Test
public void testProcedure(){
String sql = "{call getuser(?,?,?)}";
Connection conn = null;
CallableStatement call = null;
try{
//得到一個連接
conn = JDBCUtils.getConnection();
//通過連接創建出statement
call = conn.prepareCall(sql);
//對於in參數,賦值
call.setInt(1, 5);
//對於out參數,申明
call.registerOutParameter(2, OracleTypes.VARCHAR);
call.registerOutParameter(3, OracleTypes.VARCHAR);
//執行調用
call.execute();
//取出結果
String username = call.getString(2);
String email = call.getString(3);
System.out.println("用戶名:" + username + " 郵箱:" + email);
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(conn, call, null);
}
}
}