posts - 0,  comments - 6,  trackbacks - 0

          數(shù)據(jù)采用oracle數(shù)據(jù)庫scott/tiger示范賬戶下的emp(員工)dept(部門)表:

          create table DEPT

          (

            DEPTNO NUMBER(2) not null primary key,

            DNAME  VARCHAR2(14),

            LOC    VARCHAR2(13)

          )


          create table EMP

          (

            EMPNO      NUMBER(4) not null  primary key,

            ENAME      VARCHAR2(10),

            JOB        VARCHAR2(9),

            MGR        NUMBER(4),

            HIREDATE   DATE,

            SAL        NUMBER(7,2),

            COMM       NUMBER(7,2),

            DEPTNO     NUMBER(2),

            constraint FK_DEPTNO foreign key (DEPTNO)references DEPT (DEPTNO)

          )


          Oracle存儲過程代碼:

          Create or replace PROCEDURE searchEmpByDept(

                 indeptno IN NUMBER,

                 empcur OUT sys_refcursor,

                 errorMsg OUT varchar)

          IS

          BEGIN

              errorMsg:='';

              OPEN empcur FOR

                SELECT *

                FROM emp

                WHERE deptno = indeptno

                ORDER BY empno;

            EXCEPTION

              WHEN OTHERS THEN

                errorMsg:= sqlerrm;-- sqlcode是異常編號,sqlerrm是異常的詳細信息

          END searchEmpByDept; 


          使用 pl/sql 過程語句測試上面的存儲過程: 

          declare 

          errorMsg  varchar(1000);

          empcur sys_refcursor;

          emp scott.emp%rowtype; 

          begin

             searchEmpByDept(10,empcur, errorMsg);

             if errorMsg is not null then

                dbms_output.put_line(errorMsg);

             end if;

             

             loop

                fetch empcur into emp;

                EXIT WHEN empcur%notfound ; 

                dbms_output.put_line(emp.ename);

             end loop;

             

             close  empcur;

          end;


          Java調(diào)用代碼:

          public class DBHelper  {

              private Connection conn = null;

              public Connection getConnection() throws ClassNotFoundException, SQLException {

                  Class.forName("oracle.jdbc.driver.OracleDriver");

                  conn = DriverManager.getConnection(

                      "jdbc:oracle:thin:@192.168.1.6:1521:ntcsoft"

                      "scott",

                      "tiger");

                  return conn;

              }

          }


          public class CallOracleProcedure {

            public static void main(String args[]) {

              ResultSet rs = null;

              CallableStatement st = null;

              Connection con =  null;

              try {

              con = new DBHelper().getConnection();

              String sql = "call searchEmpByDept(?,?,?)";

              st = con.prepareCall(sql);

              st.setInt(1, 20);//設(shè)置入?yún)⒉块T編號20

              //注冊返回類型參數(shù)。CURSOR類型在java.sql.Tyes中沒有定義,在驅(qū)動程序包中找到了

              st.registerOutParameter(2, oracle.jdbc.driver.OracleTypes.CURSOR);

              st.registerOutParameter(3, Types.VARCHAR);

              boolean result = st.execute();

              //獲取返回參數(shù)

              rs = (ResultSet) st.getObject(2);

              String msg = st.getString(3);

              if(msg != null)

                 System.out.println(msg);//異常信息部為null則打印

              System.out.println("empno" + ""t" + "ename" + ""t" + "sal" + ""t""deptno");

              //輸出查詢結(jié)果

              StringBuilder output = new StringBuilder();

              while (rs.next()) {

                  output.append(rs.getInt("empno"))

                  .append(""t")

                  .append(rs.getString("ename"))

                  .append(""t")

                  .append(rs.getDouble("sal"))

                  .append(""t")

                  .append(rs.getInt("deptno"));

                  System.out.println(output.toString());

                  output.delete(0, output.length());

              }

              output = null;

              }catch (Exception e) {

                 e.printStackTrace();

              }finally{

              try {

                 if(rs!=null) rs.close();

                 if(st!=null) st.close();

                 if(con!=null) con.close();

              } catch (SQLException e) {

                  e.printStackTrace();

              }

              }

            }

          }


          注意,oracle數(shù)據(jù)庫的scott示范賬戶默認是被鎖定的,在使用之前需要解鎖:

          alter user scott account unlock;

          然后以scott/tiger 登陸數(shù)據(jù)庫服務(wù)器,會提示密碼已過期,并要求你立即輸入新密碼。


          學(xué)軟件開發(fā),到蜂鳥科技!                   

          地址:鄭州市文化路豐產(chǎn)路口東50米豐產(chǎn)路21SOHO世紀城西塔20

          電話:0371-63839606  手機:13838505572(申老師) 13673990036 (許老師)

          QQ: 1073422643  1群:47614738 2群:108157678  鄭州軟件開發(fā)興趣小組群:38236716

          網(wǎng)址:www.ntcsoft.com

          posted on 2010-09-16 21:45 whistler 閱讀(2855) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(2)

          我參與的團隊

          文章檔案(22)

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 伊川县| 得荣县| 康乐县| 彭水| 太原市| 玛纳斯县| 陇川县| 车致| 孝义市| 肥东县| 舞阳县| 新宁县| 新蔡县| 邯郸市| 昭苏县| 贞丰县| 邳州市| 沁水县| 阆中市| 宝山区| 西乡县| 平和县| 革吉县| 卢湾区| 潮安县| 灵石县| 洪泽县| 杭州市| 武夷山市| 清远市| 都江堰市| 疏勒县| 海淀区| 呼和浩特市| 嘉祥县| 郎溪县| 信丰县| 洞头县| 卢龙县| 米脂县| 山东省|