2015-03-25 197 views
0

我創建了一個存儲過程如下:JDBC存儲過程調用

在MySQL

DELIMITER $$ 
CREATE PROCEDURE `bank`.`hello` (in id varchar(20),in pass varchar(20)) 
BEGIN 
insert into admin(username,password) values (id,pass); 
END $$ 
DELIMITER ; 

//存儲過程和我打電話的Java存儲過程如下:

//使用JDBC調用存儲過程

package StoredProcEx; 
import java.sql.*; 
public class StoredProcEx { 
    public static void main(String arg[]){ 
    try{ 

    Class.forName("com.mysql.jdbc.Driver"); 
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/bank","root","root"); 
    //PreparedStatement stmt=con.prepareStatement("insert into admin values(?,?)"); 
    CallableStatement stmt=con.prepareCall("{?=call hello(?,?)}"); 
    stmt.setString(1,"birender"); 
    stmt.setString(2,"admin"); 
    stmt.execute(); 
    //stmt.execute(); 
    } 
    catch(ClassNotFoundException ce){ 
    ce.printStackTrace(); 
    } 
    catch(SQLException se){ 
    se.printStackTrace(); 
    } 
    catch(Exception e){} 
    } 
} 

但它顯示編譯時間外如下:

可以設置IN參數來存儲函數調用的返回值。

+2

你的問題是什麼? – MeshBoy 2015-03-25 06:47:43

回答

3

請使用

CallableStatement stmt=con.prepareCall("{call hello(?,?)}"); 

代替

CallableStatement stmt=con.prepareCall("{?=call hello(?,?)}"); 

第一?在你的代碼中用於返回類型