免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2385 | 回复: 0
打印 上一主题 下一主题

storeprocedure: 如何在自己的code中使用 存贮过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-04 14:00 |只看该作者 |倒序浏览
我有如下的存储过程,在执行下面的code时总是出现 “java.sql.SQLException: Routine (test_proc_char) can not be resolved.", 因为存贮过程的创建和调用都是一个账号(都在下面的code中),因此出现这种错误觉得很少奇怪,是我那儿用错了吗?大家帮忙看看是什么原因?谢谢!

import java.sql.*;


public class StoreProc_informix {

        static String server = "rdbmsifx";
        static String databaseName = "llh";
        static String machineName = "10.111.3.110"; // Added for Informix
        static String portNumber = "1528"; // Added for Informix

        //connect to informix

        private static String userName = "informix";
        private static String password = "Platform389";
        private static String dbType_ = "informix";

        public static void main(String[] args) {

                try {
                         //procFunction

                        String procFunc = "CREATE FUNCTION test_func_char(task_id INT) RETURNING CHAR(250), "
                                        + "CHAR(1), CHAR(3), CHAR(1); DEFINE nm CHAR(250); DEFINE tp CHAR(1); DEFINE cd CHAR(3); "
                                        + "DEFINE st CHAR(1); SELECT tsk_task_nm, tsk_task_tp, tsk_stat_cd, tsk_tp_state INTO nm, "
                                        + "tp, cd, st FROM tsk_task_char WHERE tsk_task_id = task_id; RETURN nm, tp, cd, st; END FUNCTION;";

                        createObject(procFunc);
                        
                         // storeprocedure
                        String procStore = "CREATE PROCEDURE test_proc_char(task_id INT, OUT task_nm "
                                        + "char(250), OUT task_tp char(1), OUT stat_cd char(3), OUT tp_state char(1)) "
                                        + "LET task_nm, task_tp, stat_cd, tp_state=test_func_char(task_id); END PROCEDURE; ";

                        createObject(procStore);
                        
                        String procSP = "{call test_proc_char(?,?,?,?,?)}";
                        CallableStatement proc = getStoredProc(procSP);
                        proc.execute();

                } catch (Exception e) {
                        e.printStackTrace();
                }

        }

        private static CallableStatement getStoredProc(String storedProc) {
                Connection conn;
                CallableStatement proc = null;
                try {
                        conn = getConnection();
                        proc = conn.prepareCall(storedProc);
                        proc.setInt(1, 100);
                        ((java.sql.CallableStatement) proc).registerOutParameter(1 + 1,
                                        java.sql.Types.VARCHAR);
                        ((java.sql.CallableStatement) proc).registerOutParameter(2 + 1,
                                        java.sql.Types.VARCHAR);
                        ((java.sql.CallableStatement) proc).registerOutParameter(3 + 1,
                                        java.sql.Types.VARCHAR);
                        ((java.sql.CallableStatement) proc).registerOutParameter(4 + 1,
                                        java.sql.Types.VARCHAR);
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

                return proc;

        }

        private static void createObject(String object1) throws Exception {

                try {
                        Connection conn = getConnection();
                        if (object1.equals(""))
                                throw new Exception("Object contains no value");
                        System.out.println("Creating object: " + object1);
                        Statement stmt = conn.createStatement();
                        stmt.execute(object1);
                        stmt.close();
                        stmt = null;
                        conn.close();
                        conn = null;
                } catch (SQLException e) {
                        e.printStackTrace();
                }
        }

        public static Connection getConnection() throws Exception {
                String url = null;
                Connection conn = null;
                try {                     
                       
                        Class.forName("com.informix.jdbc.IfxDriver");
                         //String URL = "jdbc:informix-sqli://interra214:1526/sumo_db:INFORMIXSERVER=ol_interra21420";
                         url = "jdbc:informix-sqli://" + machineName + ":" + portNumber;
                         url = url + "/" + databaseName + ":INFORMIXSERVER=" + server;
                         conn = DriverManager.getConnection(url, userName, password);
                    
                        //          System.out.println("Calling from AutotestUtil.java's getConnection() ....Connect to: " + conn);
                } catch (SQLException e) {
                        e.printStackTrace();
                }
                return conn;
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP