【发布时间】:2018-04-14 03:08:03
【问题描述】:
我使用 MySQL 员工演示数据库创建了一个非常简单的存储过程,它应该返回一个值:
CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_GetEmployeeNo`(IN i_last_name VARCHAR(16))
BEGIN
SELECT emp_no FROM employees WHERE last_name = i_last_name;
END$$
DELIMITER ;
我正在尝试从这样的 java 程序中调用此过程:
package test_mysql_demo_sp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.CallableStatement;
import java.sql.Types;
import java.sql.ResultSet;
public class Test_mysql_demo_sp {
public static void main(String[] args) {
Connection conn = null;
String jdbcUrl;
jdbcUrl = "jdbc:mysql://localhost:3306/employees";
String username = "TestUser";
String password = "abc123";
try {
conn = DriverManager.getConnection(jdbcUrl, username, password);
CallableStatement cStmt = conn.prepareCall("{?= call usp_GetEmployeeNo(?)}");
cStmt.registerOutParameter(1, Types.INTEGER);
cStmt.setString(2, "Smith");
cStmt.execute();
System.out.println(cStmt.getInt(1));
cStmt.close();
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
}
}
但是,我收到以下错误:
SQLException: FUNCTION employees.usp_GetEmployeeNo does not exist
SQLState: 42000
VendorError: 1305
我可以用同一个用户从 MySQL 工作台调用该过程,它返回的值就好了。 java代码不正确吗?程序是否正确创建?这是权限问题吗? (我已授予用户几乎所有权限)任何想法都将不胜感激,因为我花了几天时间试图解决这个问题。
谢谢!
【问题讨论】:
标签: java mysql stored-procedures