1

我正在尝试从 Java 调用存储过程。然而,我所做的是寻找一个函数。我错过了什么?到目前为止,这是我尝试过的;

open();

try {

    statement = conn.prepareStatement(StringConstant.PROC_GET_POSITIONS);
    ResultSet resultSet = statement.executeQuery();

    while( resultSet.next() ){

        System.out.println(resultSet.getString(0));

    }

} catch ( SQLException sqlEx ) {
    sqlEx.printStackTrace();
}

close();

抛出此异常;

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION test.get_positions does not exist

这是存储过程的编写方式(这是为了测试目的):

CREATE FUNCTION get_positions(OUT o_position VARCHAR(25))
BEGIN

  SELECT pos_name
  INTO o_position
  FROM master_position;

END;

我提出这个问题的原因是 SO 建议了这个标题:

-自动调用存储过程 1
-如何在 MySQL 1的存储过程中调用存储过程 -
在 Hibernate中调用存储过程 2 -
从存储过程和/或使用 COUNT 调用存储过程 2
-mysql 存储过程调用休眠 2

这些都没有回答我的问题。

4

3 回答 3

8

我现在遇到这个问题。我找到了这个:

        Connection conn = getMySqlConnection();
        // Step-2: identify the stored procedure
        String simpleProc = "{ call simpleproc(?) }";
        // Step-3: prepare the callable statement
        CallableStatement cs = conn.prepareCall(simpleProc);
        // Step-4: register output parameters ...
        cs.registerOutParameter(1, java.sql.Types.INTEGER);
        // Step-5: execute the stored procedures: proc3
        cs.execute();
        // Step-6: extract the output parameters
        int param1 = cs.getInt(1);
        System.out.println("param1=" + param1);

我认为这可能是一个很好的例子。

来源:http ://www.java2s.com/Code/Java/Database-SQL-JDBC/CallStoredProcedureInMySql.htm

于 2014-07-23T10:21:46.727 回答
3

您正在尝试从存储过程中获取结果。存储过程不返回值,而是函数返回值。

于 2013-05-23T07:38:45.120 回答
3
Statement stmt;
            stmt = conn.createStatement();
            stmt.execute(String.format("CALL swap_devices(%d,%d)", oldDeviceID, newDeviceID));
于 2013-11-26T12:54:18.183 回答