从java中的mysql存储过程中获取参数

我有问题从java中的mysql存储过程检索OUT参数。

CALL proc_after_topic_add('newtest',@result); SELECT @result; 

这个查询给了我想要的参数,但我将如何在java中检索它。我尝试使用CallableStatement但我得到了

 java.sql.SQLException: Callable statments not supported. 

错误。请伙计们帮助我。 我试过跟随

 String sql = "CALL proc_after_topic_add(?,?);"; CallableStatement cstmt = conn.prepareCall(sql); cstmt.setString(1, topicname); cstmt.registerOutParameter(2, java.sql.Types.INTEGER); ResultSet rs = cstmt.executeQuery(); if (rs.next()) { if (rs.getInt(1) == 1) { res = 0; } else { res = -1; } } 

我没有发布存储过程代码,因为它没有任何问题。

 PS:I a using mysql 5.5.21 and yes i should probably mention i am using mysql connector 3.0.15 

好的,这已经解决了。对于遇到同样问题的人,只需下载最新版本的mysql连接器即可。

这一行出错

  cstmt.registerOutParameter(2, java.sql.Types.INTEGER); 

像这样改变

  String sql = "CALL proc_after_topic_add(?,?);"; cstmt.registerOutParameter(2, java.sql.Types.INTEGER); 
 Create a schema test and create a table employee in schema with 2 columns. id and employeename and insert some data. Use this Stored Procedure. DELIMITER $$ DROP PROCEDURE IF EXISTS `test`.`get_count_name1` $$ CREATE PROCEDURE `test`.`get_count_name1`(IN the_name VARCHAR(64),OUT the_count INT) BEGIN SELECT COUNT(*) INTO the_count from employee where employeename=the_name; END$$ DELIMITER ; 

使用此示例。 用户名和密码对我来说都是root和root。 根据你的改变
需求。 在这里,我正在计算的雇员名称=“deepak”

 import java.sql.*; public class JDBCExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/test"; // Database credentials static final String USER = "root"; static final String PASS = "root"; public static void main(String[] args) { Connection conn = null; CallableStatement stmt = null; try{ //STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); //STEP 3: Open a connection System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //STEP 4: Execute a query System.out.println("Creating statement..."); String sql = "{call get_count_name1 (?, ?)}"; stmt = conn.prepareCall(sql); //Bind IN parameter first, then bind OUT parameter String name = "Deepak"; stmt.setString(1, name); // This would set ID as 102 // Because second parameter is OUT so register it stmt.registerOutParameter(2, java.sql.Types.INTEGER); //Use execute method to run stored procedure. System.out.println("Executing stored procedure..." ); stmt.execute(); int count=stmt.getInt(2); System.out.println(count); stmt.close(); conn.close(); }catch(SQLException se){ //Handle errors for JDBC se.printStackTrace(); }catch(Exception e){ //Handle errors for Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); }//end main }//end JDBCExample