java - 调用 CallableStatement.execute() 时出现问题;

标签 java stored-procedures jdbc

当我尝试调用执行CallableStatement.execute()时, 我收到以下异常

java.sql.SQLException: The user specified as a definer ('student'@'127.0.0.1:3306') does not exist

myDB URL- :jdbc:mysql://127.0.0.1:3306/demo?useSSL=false
Username- student
password- student

如果我尝试建立连接并使用语句对象执行简单的选择语句,则相同的代码可以正常工作。

我还检查了具有相同定义器的存储过程片段CREATE DEFINER=student@127.0.0.1:3306``

我附上了我的代码片段和几个图像链接,以确保定义器的正确性。

请让我知道哪里出了问题以及如何解决

代码: [引发 SQL 异常][1] Connection Credentials Stored Procedure Snippet

import java.sql.*;
public class Storedprocedures {

    public static void main(String[] args) {

        Connection mycon = null;
        CallableStatement calstat = null;
        PreparedStatement stat = null;
        ResultSet rs = null;

        String dep = "HR";
        int salary = 10000;

        try {
// Get a connection to database


mycon = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/demo?useSSL=false", "student", "student");
System.out.println("Conn success");

// Prepare the stored procedure call
calstat = mycon.prepareCall("{call increase_salaries_for_department(?, ?)}");

// Set the parameters           
calstat.setString(1, dep);
calstat.setDouble(2, salary);

// Call stored procedure
calstat.execute();

// Prepare statement            
stat = mycon.prepareStatement("select * from employees where department=?");

            stat.setString(1, dep);

// Execute SQL query
            rs = stat.executeQuery();
//Helper Method 
            RsetIterator.rset(rs);

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

最佳答案

关于 mysql 文档,它指定 CREATE DEFINER

should be a MySQL account specified as 'user_name'@'host_name',

Create Stored Procedure Link

一种可能的解决方案是将 CREATE DEFINER TO 更改为

CREATE DEFINER = 'student'@'127.0.0.1'

CREATE DEFINER = 'student'@'localhost'

CREATE DEFINER = 'student'@'%'

只需尝试从定义器中删除端口号即可。

关于java - 调用 CallableStatement.execute() 时出现问题;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45272213/

相关文章:

java - 将数据从 Android 应用程序发送到 MySQL 数据库

java - 固定序列排列

mysql - mySQL 中的存储过程出错

java - 来自单个表的选择查询的 JDBC 或 Hibernate 性能

java - 从列表中选择一个数据库

Java (Android) 解密带有 IV 的 msg

java - 流式传输多个属性 - Java 8(基本示例)

sql - 过程或功能!指定的参数太多

c# - 多线程环境中的 SQL Server 存储过程

java - 处理 MySQL 查询花费的时间太长并抛出 "Communications link failure"