当前位置:数据库 > DB2 >>

DB2数据库、触发器、存储过程、JAVA数据库链接(JDBC)

 

触发器

   建一个触发器,应包含以下部分:

   触发器名字

   触发器触发事件: 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"

    

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,