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

页面导航:首页 > 数据库 > DB2 > DB2数据库、触发器、存储过程、JAVA数据库链接

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

来源: 作者: 时间:2016-01-23 11:15 【

触发器 建一个触发器,应包含以下部分: 触发器名字 触发器触发事件: insert,delete,update 激活时间: before,after 粒度: for each statement,for each row 过渡变量: old row:表示触发事件之前...

 

触发器

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

   触发器名字

   触发器触发事件: 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.Driver");

       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依赖一组函数调用,可嵌入主语言中.

Tags:

相关文章

    文章评论

    最 近 更 新
    热 点 排 行
    Js与CSS工具
    代码转换工具
    
    <