- 论坛徽章:
- 0
|
我有如下的存储过程,在执行下面的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;
}
} |
|