2015-03-25 187 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(?,?)}"); 

第一?在你的代码中用于返回类型