程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2數據庫、觸發器、存儲過程、JAVA數據庫鏈接(JDBC)

DB2數據庫、觸發器、存儲過程、JAVA數據庫鏈接(JDBC)

編輯:DB2教程

 

觸發器

   建一個觸發器,應包含以下部分:

   觸發器名字

   觸發器觸發事件: insert,delete,update

   激活時間: before,after

   粒度: for each statement,for each row

   過渡變量:

        old row:表示觸發事件之前被修改的值:

        new row表示觸發事件之後被修改的值

        old table表示觸發事件之前全部被修改行的一個只讀假想表

        new table表示觸發事件之後全部被修改行的一個假想表

   觸發條件: 由WHEN開始,可包含一個或多個謂詞,可包含過渡變量和子查詢

   觸發體: 由一個或多個SQL語句組成

例:

      CREATE TRIGGER REORDER

      AFTER UPDATE OF ON_HAND, MAX_STOCKED ON PARTS

      REFERENCING NEW AS N_ROW

      FOR EACH ROW MODE DB2SQL

      WHEN (N_ROW.ON_HAND < 0.10 * N_ROW.MAX_STOCKED

      AND N_ROW.ORDER_PENDING = 'N')

      BEGIN ATOMIC

        VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED -

                                  N_ROW.ON_HAND,

                                  N_ROW.PARTNO));

        UPDATE PARTS SET PARTS.ORDER_PENDING = 'Y'

        WHERE PARTS.PARTNO = N_ROW.PARTNO;

      END

 存儲過程

    存儲過程主要通過”Stored Procedure Builder”來建立,

(一)對存儲過程的調用分三部分:

1.連接(與數據庫建立連接)

       Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();

       Connection con=DriverManager.getConnection(url,user,password);

2。注冊輸出參數

       cs.registerOutParameter (3, Types.INTEGER);

3。調用存儲過程:

       CallableStatement cs=con.prepareCall("{call store_name(參數,參數,參數)}");

(二)調用舉例:

import java.net.URL;

import java.sql.*;

class test2

{

   public static void main(String args[])

   {

     String url = "jdbc:db2://wellhope/sample";

     String user="db2admin";

     String password="db2admin";

     try

     {

       Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();

     

       //與數據庫建立連接

       Connection con=DriverManager.getConnection(url,user,password);

     

       checkForWarning(con.getWarnings());

       DatabaseMetaData dma=con.getMetaData();

       String str="This is a string";

       //int hashcode=str.hashCode();

       //System.out.println("Hashcode   "+hashcode);

       //創建Statement對象,用於執行SQL語句

       Statement stmt=con.createStatement();

       //創建CallableStatement對象,用於執行存儲過程

       CallableStatement cs=con.prepareCall("{call PRO_YHDL1(?,?,?)}");

       //注冊輸出參數

       cs.registerOutParameter (3, Types.INTEGER);

       int result = 0;

       cs.setString(1,"123");

       cs.setString(2,"123");

       cs.execute();

       result = cs.getInt (3);

       dispResultSet(result);

       cs.close();

       con.close();

     }

     catch(SQLException ex)

     {

       System.out.println(" * * * SQLException caught * * * ");

     

       while(ex!=null)

       {

          System.out.println("SQLState: "+ex.getSQLState());

          System.out.println("Message: "+ex.getMessage());

          System.out.println("Vendor: "+ex.getErrorCode());

          ex=ex.getNextException();

          System.out.println("");

       }

     }  

     catch(java.lang.Exception ex)

     {   

       ex.printStackTrace();

     }

}

(三)存儲過程舉例:

     Pro_yhdl1是一個存儲過程,它的功能是從數據庫表YHDL中取出PWD:

import java.sql.*;                 

public class Pro_yhdl1

{

    public static void pro_yhdl1 ( String m_id,

                                   String m_pwd,

                                   int[] result ) throws SQLException, Exception

    {

        // Get connection to the database

        Connection con = DriverManager.getConnection("jdbc:default:connection");

        PreparedStatement stmt = null;

        ResultSet rs = null;

        String sql;

        String m_password="";

        sql = "SELECT"

             + "       DB2ADMIN.YHDL.PWD"

            + " FROM"

            + "    DB2ADMIN.YHDL"

            + " WHERE"

            + "    ("

            + "       ( "

            + "          DB2ADMIN.YHDL.ID = '"+m_id.trim()+"'"

            + "       )"

             + "    )";

        stmt = con.prepareStatement( sql );

        rs = stmt.executeQuery();

        // Access query results

        while (rs.next())

        {

           m_password=rs.getString(1);

           m_password=m_password.trim();

           if (rs.wasNull())

              System.out.print("NULL");

           else

             System.out.print(m_password);

         }

        if(m_password.equals(m_pwd.trim()))

        {

          result[0] =1;

        }

        else

        {

          result[0] =0;

        }

        // close open resources

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

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

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

        // set return parameter

        //result[0] = result[0];

    }

}

 JAVA數據庫鏈接(JDBC)

   DB2 的Java 支持包括JDBC,一個以供應商為中心的動態SQL 接口,它通過標准的Java方法提供對應用程序的數據存取。JDBC 與DB2 CLI 相似之處在於您不必預編譯或聯編JDBC 程序。使用JDBC 編寫的應用程序只使用動態SQL。

JDBC編程步驟:

1建立與數據庫的連接:

       Class.forName("Com.ibm.db2.jdbc.net.DB2Driver");

       connection con=DriverManager.getConnection(url);

2.創建Statement對象:

       Statement stmt=con.createStatement();

3執行查詢語句:

       ResultSet rs=stmt.execQuery("SQL語句");

4.獲取和設置選項:

       ResultSetMetaData rsmd=rs.getMetaData();

       int numCols=rsmd.getColumnCount()獲取結果集總列數;

       rsmd.getColumnLabel(i))獲取記錄值;

       setMaxRows :設置結果集能容納的最多行數.

       setQueryTimeout:設置一個語句執行等待的時間.

       setEscapeProcessing:通知驅動程序如何處理轉義字符.

5.關閉Statement

       stmt.clost();

 調用層接口(CLI)

    CLI不是一種新的查詢語言,它只不過是應用程序可利用SQL語句去提交事務處理的一種簡單接口,對數據庫的查詢和修改,仍要使用SQL語言編寫,包括CLI函數的調用。

    調用層接口(CLI)為DB2所提供的處理動態SQL語句的兩種機制之一,即在應用程序首次運行時,動態SQL語句提交給數據庫系統,CLI依賴一組函數調用,可嵌入主語言中.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved