我有一個處理傳入信息的PHP頁面,它使用shell_exec()
這個參數並構造一個命令在服務器上執行一個Java類。從PHP執行java MySQL存儲過程
Java類獲取參數並調用MySQL中的存儲過程並返回所需的結果。我已經從終端獨立地測試了我的Java類,並且它工作正常。
我的問題是,當我從PHP執行Java類時,它會一直運行,直到我定義存儲過程調用的行並停止在那裏並返回NULL
!
cSt = conn.prepareCall("{CALL prcName(?,?,?,?)}");
的沒有例外,同時由於上述行執行處於try catch
和沒有印刷從catch
消息。
該程序只運行到此行並返回NULL
!
這裏是PHP頁面:
<?php
$name= $_POST['name'];
$contact= $_POST['contact'];
$response = shell_exec("java ClassName".$name." ".$contact);
echo $response;
?>
Java類(部分):
public static void main(String[] args) {
//connection to database
int returnValue = methodName(args[0], args[1]);
System.out.print(String.valueOf(returnValue));
//close connection to db
}
public static int methodName(String name,String contact){
int result = 5;
try {
cSt = conn.prepareCall("{CALL prcName(?,?,?)}");
cst.CallableStament().setString("name",name);
cst.CallableStament().setString("contact",contact);
cst.CallableStament().registerOutParameter("rtn", java.sql.Types.INTEGER);
cst.CallableStament().execute();
result = cst.CallableStament().getInt("rtn");
} catch (SQLException e) {e.printStackTrace();}
return result;
}
UPDATE: 我已經從這個問題是地方縮小,最後發現,雖然specifiying司機通過Class.forName("com.mysql.jdbc.Driver");
我得到的錯誤:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:195)
at Classname.Connect(classname.java:29)
at classname.
更新2: 能夠使用驅動程序我在/etc/profile/
添加了CLASSPATH但是我注意到,更改僅適用於登錄用戶。但是apache在運行shell_exec()
的時候正在使用用戶「www-data」,我無法想出一個將類路徑分配給該用戶的方法。
添加'e.printStacktrace()'獲取錯誤的詳細信息。 – Blip
顯示更多代碼T. http://www.mysqltutorial.org/calling-mysql-stored-procedures-from-jdbc/ – Drew
沒有錯誤!當我用'shell_exec()'調用它時,java程序就停在那條線上。我在調用存儲過程的方法中使用'system.out.print()'來知道哪裏停止工作。 – Tarounen