在《java下OracleHelper包》一文中,FuWaer給出了一個針對java訪問oracle數據庫的封裝工具包,本篇文章通過若干實例來介紹如何應用這個工具包。文本所給出的實例的編譯運行環境如下:
jdk1.5.0_12,eclipse-jee-europa-win32,oracle8.1.7
實例所使用的數據庫表結構定義:
(
SERIALNO NUMBER(10) not null,
FRIEND_NAME VARCHAR2(50) not null,
FRIEND_AGE NUMBER(10) not null
)
執行文本性sql語句
import ey.db.oracle.*;
public class MyClient {
public static void main(String[] args)
{
try
{
//數據庫連接參數
String connectionStr = "jdbc:oracle:thin:@192.168.1.192:1521:itdevdb;htecp;000000";
//文本型sql語句
String commandText = "select * from friend";
//通過OracleHelper的函數執行sql語句
DataSet ds = OracleHelper.ExecuteDataSet(connectionStr, CommandType.Text, commandText);
//從結果集中獲取結果數據
for(int i=0;i<ds.Tables[0].Rows.length;i++)
{
int serialno = Integer.parseInt( ds.Tables[0].Rows[i].Columns[0].colValue.toString() );
String name = ds.Tables[0].Rows[i].Columns[1].colValue.toString();
int age = Integer.parseInt( ds.Tables[0].Rows[i].Columns[2].colValue.toString() );
System.out.println("編號:"+serialno+" 姓名:"+name+" 年齡:"+age);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
運行結果:
編號:1 姓名:FuWaer1 年齡:10
編號:2 姓名:FuWaer2 年齡:20
編號:3 姓名:FuWaer3 年齡:30
編號:4 姓名:FuWaer4 年齡:40
執行存儲過程
所調用的存儲過程定義如下:
p_split_age number,
p_down_friends out p_cursor,
p_uper_friends out p_cursor
)is
begin
open p_down_friends for
select * from friend where friend_age < p_split_age;
open p_uper_friends for
select * from friend where friend_age > p_split_age;
end;
其中,一個輸入參數p_split_age,兩個輸出參數分別是p_down_friends、p_uper_friends,兩個輸出參數的類型p_cursor定義爲:type p_cursor is ref cursor;
測試程序如下:
import ey.db.oracle.*;
public class MyClient {
public static void main(String[] args)
{
try
{
//數據庫連接參數
String connectionStr = "jdbc:oracle:thin:@192.168.1.192:1521:itdevdb;htecp;000000";
//需要調用的存儲過程
String commandText = "pac_log.SplitFriendByAge";
//爲存儲過程準備參數
Parameter p_split_age = new Parameter("p_split_age",oracle.jdbc.OracleTypes.NUMBER,25);
Parameter p_down_friend = new Parameter("p_down_friend",oracle.jdbc.OracleTypes.CURSOR,null,ParameterDirection.OUT);
Parameter p_uper_friend = new Parameter("p_uper_friend",oracle.jdbc.OracleTypes.CURSOR,null,ParameterDirection.OUT);
//通過OracleHelper的函數執行存儲過程,傳遞參數
DataSet ds = OracleHelper.ExecuteDataSet(
connectionStr,
CommandType.StoreProcedure,
commandText,
p_split_age,p_down_friend,p_uper_friend);
//從結果集中獲取結果數據
System.out.println("年齡<25的朋友列表");
DataTable dt_down_friend = ds.Tables[0];//第一個結果集
PrintResult(dt_down_friend);
System.out.println("年齡>25的朋友列表");
DataTable dt_uper_friend = ds.Tables[1];//第二個結果集
PrintResult(dt_uper_friend);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
private static void PrintResult(DataTable dt)
{
for(int i=0;i<dt.Rows.length;i++)
{
int serialno = Integer.parseInt( dt.Rows[i].Columns[0].colValue.toString() );
String name = dt.Rows[i].Columns[1].colValue.toString();
int age = Integer.parseInt( dt.Rows[i].Columns[2].colValue.toString() );
System.out.println("編號:"+serialno+" 姓名:"+name+" 年齡:"+age);
}
}
}
運行結果:
年齡<25的朋友列表
編號:1 姓名:FuWaer1 年齡:10
編號:2 姓名:FuWaer2 年齡:20
年齡>25的朋友列表
編號:3 姓名:FuWaer3 年齡:30
編號:4 姓名:FuWaer4 年齡:40
事務控制
import ey.db.oracle.*;
public class MyClient {
public static void main(String[] args)
{
try
{
//數據庫連接參數
String connectionStr = "jdbc:oracle:thin:@192.168.1.192:1521:itdevdb;htecp;000000";
//需要執行的sql語句
String commandText1 = "update friend set friend_age = friend_age +1 where friend_age < 25";
String commandText2 = "update friend set friend_age = friend_age +2 where friend_age > 25";
//構建OracleConnection實例
OracleConnection connection = new OracleConnection(connectionStr);
//構建OracleTransaction實例
OracleTransaction transaction = connection.BeginTransaction();
try
{
OracleHelper.ExecuteNonQuery(transaction, CommandType.Text, commandText1);
OracleHelper.ExecuteNonQuery(transaction, CommandType.Text, commandText2);
//提交事務
transaction.Commit();
}
catch(Exception ex)
{
//回滾事務
transaction.Rollback();
ex.printStackTrace();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}