ADF之在代码中调用PLSQL中的PKG

来源:互联网 发布:淘宝新手卖家交流群 编辑:程序博客网 时间:2024/06/06 13:09

如果想调用PLSQL中的PKG,则首先要在代码中连接到数据库中,以下提供两种连接方式:JDBCJNDI

关于这两种对数据库连接的区别,可见http://www.cnblogs.com/panjun-Donet/articles/1182204.html

JDBC连接数据库

    public Connection getJDBCConnection() {        try {            Connection conn = null;            Class.forName("oracle.jdbc.driver.OracleDriver");            conn = DriverManager.getConnection("URL", "UserName", "Password");            return conn;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }

JNDI连接数据库

    public Connection getJNDIConnection() {        try {            Connection conn = null;            InitialContext ctx = new InitialContext();            if (ctx != null) {                Object o = ctx.lookup("DataSource Name");                DataSource ds = (DataSource)o;                conn = ds.getConnection();            }            return conn;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }

在得到数据库的连接之后,就可以很愉快的调用数据库里面的各种资源了

如下有一个PKG,命名为fnd_cux_pkg,其中有一个方法insert_lookup_type
代码如下

CREATE OR REPLACE PACKAGE fnd_cux_pkg IS  -- Author  : 张俊强~  -- Created : 2017/8/22 10:36:41  -- Purpose : ADF调用pkg测试  /*--======================--  * 插入值列表中的Type  *--======================--*/  PROCEDURE insert_lookup_type(lookup_type_p VARCHAR2,                               lookup_name_p VARCHAR2,                               lookup_desc_p VARCHAR2,                               module_code_p VARCHAR2); END fnd_cux_pkg;
CREATE OR REPLACE PACKAGE BODY fnd_cux_pkg IS  PROCEDURE insert_lookup_type(lookup_type_p VARCHAR2,                               lookup_name_p VARCHAR2,                               lookup_desc_p VARCHAR2,                               module_code_p VARCHAR2) IS  BEGIN    INSERT INTO FND_LOOKUP_TYPES           (LOOKUP_ID,LOOKUP_TYPE,LOOKUP_NAME,LOOKUP_DESC,MODULE_CODE)           VALUES           (FND_LOOKUP_TYPES_S.Nextval,lookup_type_p,lookup_name_p,lookup_desc_p,module_code_p);           COMMIT;  END insert_lookup_type;END fnd_cux_pkg;

现在要在代码中调用PKG啦

    /**     * 调用pkg来插入一条数据到FND_LOOKUP_TYPE表中     * */    public void onInsertLookupTypeListener(ActionEvent actionEvent) {        // 1: 获取与数据库的连接        Connection conn =this.getJNDIConnection();//JDBC也可        System.out.println(conn);        try {            PreparedStatement pStatement =                 conn.prepareStatement("BEGIN fnd_cux_pkg.insert_lookup_type(?,?,?,?); END;");                pStatement.setString(1, "HR_EMP_HEIGHT");                pStatement.setString(2, "身高");                pStatement.setString(3, "身高选择");                pStatement.setString(4, "HR");                pStatement.executeUpdate();                conn.close();        } catch (SQLException e) {            throw new RuntimeException("插入异常",e);        }    }

注:使用JDBC还是JNDI取决于AM中对于Connection Type的配置。