准備一個oracle 的JDBC jar 包:ojdbc14_11g.jar
首先找到你的 oracle 安裝位置,例如:

1.創建一個JDBC數據庫連接工具類:
- package com.test.db;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class JDBCUtils {
- private static String driver = "oracle.jdbc.OracleDriver";
- private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
- private static String user = "數據庫連接名";
- private static String password = "數據庫連接密碼";
- //注冊數據庫驅動
- static{
- try {
- Class.forName(driver);
- } catch (Exception e) {
- throw new ExceptionInInitializerError(e);
- }
- }
- /**
- * 獲取數據庫連接
- * @return
- */
- public static Connection getConnection(){
- try {
- return DriverManager.getConnection(url,user,password);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 釋放數據庫連接資源
- * @param conn
- * @param st
- * @param rs
- */
- 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;
- }
- }
- }
- }
package com.test.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
private static String driver = "oracle.jdbc.OracleDriver";
private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
private static String user = "數據庫連接名";
private static String password = "數據庫連接密碼";
//注冊數據庫驅動
static{
try {
Class.forName(driver);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 獲取數據庫連接
* @return
*/
public static Connection getConnection(){
try {
return DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 釋放數據庫連接資源
* @param conn
* @param st
* @param rs
*/
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;
}
}
}
}
2.調用 存儲過程:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleTypes;
- import oracle.jdbc.oracore.OracleType;
- import com.hwb.db.JDBCUtils;
- /**
- * 調用存儲過程 一個輸入參數,多個 輸出參數
- * @author Administrator
- *
- */
- public class ProcedureTest {
- /**
- * create or replace procedure selectUserById(uid in number,
- uName out VARCHAR2,
- uAge out number,
- uSex out char)
- */
- @Test
- public void testProcedure(){
- String sql = "{call selectUserById(?,?,?,?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到一個數據庫連接
- conn = JDBCUtils.getConnection();
- //通過連接創建出statement
- call = conn.prepareCall(sql);
- //對於in參數,賦值
- call.setInt(1, 2); // (第幾個問號,要賦的值)
- //對out參數,聲明
- call.registerOutParameter(2, OracleTypes.VARCHAR); //(第幾個問號,聲明的類型)
- call.registerOutParameter(3, OracleTypes.NUMBER);
- call.registerOutParameter(4, OracleTypes.CHAR);
- //執行調用
- call.execute();
- //取出結果
- String userName = call.getString(2);
- int userAge = call.getInt(3);
- String userSex = call.getString(4);
- System.out.println("用戶姓名:"+userName+"\n\t年齡:"+userAge+"\n\t性別:"+userSex);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- //關閉連接,釋放資源
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo;
import java.sql.CallableStatement;
import java.sql.Connection;
import org.junit.Test;
import oracle.jdbc.internal.OracleTypes;
import oracle.jdbc.oracore.OracleType;
import com.hwb.db.JDBCUtils;
/**
* 調用存儲過程 一個輸入參數,多個 輸出參數
* @author Administrator
*
*/
public class ProcedureTest {
/**
* create or replace procedure selectUserById(uid in number,
uName out VARCHAR2,
uAge out number,
uSex out char)
*/
@Test
public void testProcedure(){
String sql = "{call selectUserById(?,?,?,?)}";
Connection conn = null;
CallableStatement call = null;
try {
//得到一個數據庫連接
conn = JDBCUtils.getConnection();
//通過連接創建出statement
call = conn.prepareCall(sql);
//對於in參數,賦值
call.setInt(1, 2); // (第幾個問號,要賦的值)
//對out參數,聲明
call.registerOutParameter(2, OracleTypes.VARCHAR); //(第幾個問號,聲明的類型)
call.registerOutParameter(3, OracleTypes.NUMBER);
call.registerOutParameter(4, OracleTypes.CHAR);
//執行調用
call.execute();
//取出結果
String userName = call.getString(2);
int userAge = call.getInt(3);
String userSex = call.getString(4);
System.out.println("用戶姓名:"+userName+"\n\t年齡:"+userAge+"\n\t性別:"+userSex);
} catch (Exception e) {
e.printStackTrace();
}finally{
//關閉連接,釋放資源
JDBCUtils.release(conn, call, null);
}
}
}
3.調用存儲方法:
- package com.test.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import oracle.jdbc.internal.OracleTypes;
- import org.junit.Test;
- import com.hwb.db.JDBCUtils;
- /**
- * 調用存儲函數,一個輸入參數,一個輸出參數
- * @author Administrator
- *
- */
- public class FunctionTest {
- /**
- * create or replace function selectAge(eno in number)
- return number
- */
- @Test
- public void testFunction(){
- //{?= call <procedure-name>[<arg1>,<arg2>...]}
- String sql = "{call selectAge(?)}";
- Connection conn = null;
- CallableStatement call = null;
- try {
- //得到數據庫連接
- conn = JDBCUtils.getConnection();
- //通過數據庫連接創建statement
- call = conn.prepareCall(sql);
- //對於輸出參數,聲明
- call.registerOutParameter(1, OracleTypes.NUMBER);
- //對於輸入參數,賦值
- call.setInt(2, 3);
- //執行調用
- call.execute();
- //獲取返回的結果
- int age = call.getInt(1);
- System.out.println("該用戶年齡:"+age);
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, null);
- }
- }
- }
package com.test.demo;
import java.sql.CallableStatement;
import java.sql.Connection;
import oracle.jdbc.internal.OracleTypes;
import org.junit.Test;
import com.hwb.db.JDBCUtils;
/**
* 調用存儲函數,一個輸入參數,一個輸出參數
* @author Administrator
*
*/
public class FunctionTest {
/**
* create or replace function selectAge(eno in number)
return number
*/
@Test
public void testFunction(){
//{?= call <procedure-name>[<arg1>,<arg2>...]}
String sql = "{call selectAge(?)}";
Connection conn = null;
CallableStatement call = null;
try {
//得到數據庫連接
conn = JDBCUtils.getConnection();
//通過數據庫連接創建statement
call = conn.prepareCall(sql);
//對於輸出參數,聲明
call.registerOutParameter(1, OracleTypes.NUMBER);
//對於輸入參數,賦值
call.setInt(2, 3);
//執行調用
call.execute();
//獲取返回的結果
int age = call.getInt(1);
System.out.println("該用戶年齡:"+age);
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, null);
}
}
}
4.調用存儲過程,一個輸入參數,返回一個查詢結果集合
- package com.hwb.demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import org.junit.Test;
- import oracle.jdbc.internal.OracleCallableStatement;
- import oracle.jdbc.internal.OracleTypes;
- import com.hwb.db.JDBCUtils;
- /**
- * 存儲過程 一個輸入參數,返回一個查詢結果集合
- * @author Administrator
- *
- */
- public class CursorTest {
- /**
- * create or replace package Mypackage as
- procedure queryUserList(uid in number,userList out usercursor);
- end mypackage;
- */
- @Test
- public void testCursor(){
- String sql = "{call Mypackage.queryUserList(?,?) }";
- Connection conn = null;
- CallableStatement call = null;
- ResultSet rs = null;
- try {
- //得到數據庫連接
- conn = JDBCUtils.getConnection();
- //通過數據庫連接創建statement
- call = conn.prepareCall(sql);
- //對於輸入參數,賦值
- call.setInt(1, 1);
- //對於輸出參數,聲明
- call.registerOutParameter(2, OracleTypes.CURSOR);
- //執行調用
- call.execute();
- //將CallableStatement 強轉成 OracleCallableStatement 用來獲取光標類型Cursor,並得到結果ResultSet
- rs = ((OracleCallableStatement)call).getCursor(2);
- //遍歷 ResultSet
- while (rs.next()) {
- //根據類型和列名取值
- int id = rs.getInt("user_id"); //括號內為 列名
- String user_name = rs.getString("user_name");
- int age = rs.getInt("user_age");
- String sex = rs.getString("user_sex");
- System.out.println("查詢到的用戶信息:\n\tid:"+id+"\n\t姓名:"+user_name
- +"\n\t年齡:"+age+"\n\t性別:"+sex);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- JDBCUtils.release(conn, call, rs);
- }
- }
- }
package com.hwb.demo;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import org.junit.Test;
import oracle.jdbc.internal.OracleCallableStatement;
import oracle.jdbc.internal.OracleTypes;
import com.hwb.db.JDBCUtils;
/**
* 存儲過程 一個輸入參數,返回一個查詢結果集合
* @author Administrator
*
*/
public class CursorTest {
/**
* create or replace package Mypackage as
procedure queryUserList(uid in number,userList out usercursor);
end mypackage;
*/
@Test
public void testCursor(){
String sql = "{call Mypackage.queryUserList(?,?) }";
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
//得到數據庫連接
conn = JDBCUtils.getConnection();
//通過數據庫連接創建statement
call = conn.prepareCall(sql);
//對於輸入參數,賦值
call.setInt(1, 1);
//對於輸出參數,聲明
call.registerOutParameter(2, OracleTypes.CURSOR);
//執行調用
call.execute();
//將CallableStatement 強轉成 OracleCallableStatement 用來獲取光標類型Cursor,並得到結果ResultSet
rs = ((OracleCallableStatement)call).getCursor(2);
//遍歷 ResultSet
while (rs.next()) {
//根據類型和列名取值
int id = rs.getInt("user_id"); //括號內為 列名
String user_name = rs.getString("user_name");
int age = rs.getInt("user_age");
String sex = rs.getString("user_sex");
System.out.println("查詢到的用戶信息:\n\tid:"+id+"\n\t姓名:"+user_name
+"\n\t年齡:"+age+"\n\t性別:"+sex);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}
