【问题标题】:Error when am calling Procedure of MySql in Jdbc在 Jdbc 中调用 MySql 的过程时出错
【发布时间】:2014-07-15 04:34:13
【问题描述】:

我在jdbc中写了一些调用mysql过程的代码

Driver requires declaration of procedure to either contain a '\nbegin' or '\n' to follow argument declaration, or SELECT privilege on mysql.proc to parse column types.

当我调用下面的过程时出现上述错误是代码:

CallableStatement  proc;

        if (JDBCConnection.connection != null) {
        Connection con = JDBCConnection.getConnection();
        System.out.println("in DAOimpl "+username);


        proc= con.prepareCall("{call getChildList(?) }");
        System.out.println("prosedure"+proc);

        proc.setString(1,username);
        System.out.println(proc);
        ResultSet rs=proc.executeQuery();
}

请给我一个对我有帮助的解决方案。

【问题讨论】:

  • 你觉得不清楚的错误信息是怎么回事?

标签: java mysql stored-procedures jdbc


【解决方案1】:

错误信息很清楚:

驱动程序要求过程声明包含“\nbegin”或“\n”以跟随参数声明,或 mysql.proc 上的 SELECT 权限以解析列类型。

这告诉我们:

  1. 您的存储过程声明不包含\nbegin 或在参数声明后没有\n;或

  2. 您用来调用语句的用户没有存储过程的SELECT 权限。

所以第 1 步是弄清楚它是这两件事中的哪一个。

要修复 #1,请将存储过程的主体放入 beginend。因此,例如,如果您的 sproc 当前是(稍微更改 MySQL 文档中的一个示例):

CREATE PROCEDURE proc(IN inputParam VARCHAR(255))
    SELECT CONCAT('zyxw', inputParam);

改成

CREATE PROCEDURE proc(IN inputParam VARCHAR(255))
BEGIN
    SELECT CONCAT('zyxw', inputParam);
END

要修复 #2,请将存储过程上的SELECT 权限授予用户。

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2014-11-23
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多