java下OracleHelper包的應用實例

 在《java下OracleHelper包》一文中,FuWaer給出了一個針對java訪問oracle數據庫的封裝工具包,本篇文章通過若干實例來介紹如何應用這個工具包。文本所給出的實例的編譯運行環境如下:

jdk1.5.0_12,eclipse-jee-europa-win32,oracle8.1.7

實例所使用的數據庫表結構定義:

create table FRIEND
(
  SERIALNO    
NUMBER(10not null,
  FRIEND_NAME 
VARCHAR2(50not null,
  FRIEND_AGE  
NUMBER(10not null
)

執行文本性sql語句

import ey.db.type.*;
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

執行存儲過程

所調用的存儲過程定義如下:

procedure SplitFriendByAge(
          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.type.*;
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.type.*;
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();
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章