【问题标题】:getting out parameter from mysql stored procedure in java从java中的mysql存储过程中获取参数
【发布时间】:2013-03-11 10:42:55
【问题描述】:

我在从 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连接器。

【问题讨论】:

    标签: java mysql stored-procedures


    【解决方案1】:

    这一行出错

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

    这样改

     String sql = "CALL proc_after_topic_add(?,?);";
     cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
    

    【讨论】:

    • 但我仍然收到 callable statement not supported 错误。是 mysql 连接器或 mysql 版本有问题。我正在使用 mysql 5.5.21
    • 可以调试这段代码,并检查是否从Sql Procedure中抛出错误,我认为不会有任何版本相关的问题。但是请检查一下,即使您可以访问 Callable 语句,也会从 sql 过程中发出。能否请您发布Sql过程
    【解决方案2】:
    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。根据您的更改
    要求。在这里,我正在计算 employeename="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
    

    【讨论】:

      猜你喜欢
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      相关资源
      最近更新 更多