2011-03-28 143 views
0

我在MySQL存儲過程中遇到了一個奇怪的問題。存儲過程問題,在本地運行但不在服務器上運行

我寫了一個簡單的存儲過程如下:

{ 

    DELIMITER $$ 

    CREATE DEFINER=`username`@`%` PROCEDURE `sp_create_my_log`(IN source TEXT, 
     OUT my_id INT) 
    BEGIN 
     -- 
     -- insert record and return primary key 
     INSERT INTO my_log (source) VALUES (source); 
     SET my_id = LAST_INSERT_ID(); 

     COMMIT; 
    END 
} 

此存儲過程運行我的本地機器上的精絕(MySQL服務器5.1,Windows XP中)。但是當我嘗試在服務器上運行它時,出現以下錯誤:

java.sql.SQLException: Parameter index of 2 is out of range (1, 0) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) 
    at com.mysql.jdbc.CallableStatement$CallableStatementParamInfo.checkBounds(CallableStatement.java:274) 
    at com.mysql.jdbc.CallableStatement.checkParameterIndexBounds(CallableStatement.java:710) 
    at com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:672) 
    at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:1846) 
    at org.apache.commons.dbcp.DelegatingCallableStatement.registerOutParameter(DelegatingCallableStatement.java:95) 
    at org.apache.commons.dbcp.DelegatingCallableStatement.registerOutParameter(DelegatingCallableStatement.java:95) 
    at com.mycomp.myprj.importer.ImporterImpl.onPreLoad(ImporterImpl.java:160) 
    at com.mycomp.myprj.importer.csv.FileImporter.load(FileImporter.java:43) 
    at com.mycomp.myprj.importer.csv.MyImporter.main(MyImporter.java:82) 
0.843 seconds 

任何想法爲什麼會發生這種情況?

+1

這是Java拋出異常,更好地顯示Java代碼以及這些細節。 SP看起來很好。 – Nishant 2011-03-28 13:55:54

回答

3

只是一個瘋狂的猜測(我更像一個MySQL比一個MySQL類的傢伙):
- 你可能在Java中聲明你的參數是錯誤的嗎? (my_id在存儲過程中聲明爲out參數,請執行Java和MySQL匹配中的簽名?)
- 如果從MySQL命令行界面調用過程,會發生什麼情況?

親切的問候,弗蘭克

+0

正如我在問題中提到的,它在我的本地機器上運行良好。整個數據庫模式是一樣的,Java應用程序是一樣的。在本地運行良好,但在服務器上發生錯誤。另外,我從MySQL Workbench命令提示符開始嘗試它,它運行良好。 – Bhushan 2011-03-28 13:58:28

+0

找到解決方案,這是區分大小寫的問題。 Windows不區分大小寫,而Linux區分大小寫。 :) – Bhushan 2011-03-28 14:15:47

相關問題