我无法在NetBeans中查看或编辑MySQL存储过程

时间:2018-11-01 06:46:55

标签: java mysql stored-procedures jdbc netbeans

我可以使用JDBC(MySQL-AB JDBC驱动程序,mysql-connector-java-5.1.23)从NetBeans(8.2)连接到MySQL数据库(5.7.23)。我可以看到表和视图,可以执行SQL语句以及数据库的其他所有操作,但是无法查看或编辑NetBeans中的存储过程(或函数)。我将它们存储在数据库中,可以在MySQL Workbench中查看和管理它们,但不能在NetBeans中看到它们(NetBeans中的“过程”文件夹为空)。可能是什么问题?

在NetBeans中,在Workbench中,左:

in NetBeans in Workbench

我有64位Windows 10 Pro(1709),64位NetBeans 8.2(PHP)和64位MySQL 5.7.14(来自WAMP)。

5 个答案:

答案 0 :(得分:2)

我正在使用netbeans 8.2补丁2,可以显示存储过程

enter image description here

这是我正在使用的信息netbeans

enter image description here

我认为您应该重新安装完整版的netbeans。

答案 1 :(得分:0)

这很烦人,我仍然没有找到解决该问题的方法。这个问题已有一年多了。 NetBeans从8.2、9、10更改为现在使用的是11.2,但此功能仍然无法使用!我更改了MySQL版本,NetBeans版本,JDBC驱动程序版本!我必须与破坏NetBeans的计算机的区域设置有关!

Stored procedures in NetBeans

在屏幕快照中,可以看到NetBeans中的SHOW PROCEDURE STATUS显示了数据库中我的存储过程的列表,但NetBeans没有在导航树中显示它们!

没有其他人遇到过这种NetBeans奇怪的行为,真是很尴尬。

mysql.proc

答案 2 :(得分:0)

可能有两个原因:

1。用户无权访问mysql.proc

NetBeans使用类似的方法获取过程和功能列表(see the source code):

SELECT 
    db, name, type, param_list, returns, body
FROM
    mysql.proc
WHERE
    TYPE = 'PROCEDURE' OR TYPE = 'FUNCTION'; 

尝试在NetBeans中执行查询并查看结果。

查看屏幕截图。在第一个上,用户root可以访问mysql模式,您可以看到所有系统模式,包括mysql。在第二个上,用户只能访问information_schema和performance_schema,而看不到过程和功能:

enter image description here

尝试向您的用户添加对MySQL模式的访问权限。在工作台中,转到服务器->用户和特权->模式特权:

enter image description here

2。 8.0 mysql中没有mysql.proc

同样,NetBeans广泛使用mysql.pros来获取有关过程和功能的元数据(请参见source code)。我想我们可以得到一个简单的解决方法,就是创建一个模拟the behavior of original mysql.proc的视图:

CREATE VIEW mysql.proc AS
    SELECT 
        ROUTINE_SCHEMA AS db,
        ROUTINE_NAME AS name,
        ROUTINE_TYPE AS type,
        ROUTINE_DEFINITION AS body,
        CONCAT(DTD_IDENTIFIER,
                ' CHARSET ',
                CHARACTER_SET_NAME) AS returns,
        (SELECT 
                GROUP_CONCAT(CONCAT(parameter_name, ' ', dtd_identifier))
            FROM
                information_schema.parameters p
            WHERE
                p.specific_name = outertable.routine_name
                    AND ordinal_position > 0) AS param_list
    FROM
        information_schema.routines outertable

创建视图后,我们可以从NetBeans 11.2中查看过程和函数,并查看其主体和参数列表。另外,我不建议使用NetBeans编辑过程,因为它无法获取完整的元数据。例如,它无法获得声明选项,例如DETERMINISTIC SQL SECURITY INVOKER

答案 3 :(得分:0)

证明是解决方案。

enter image description here

答案 4 :(得分:0)

将 mysql.proc 上的所有权限授予 ''@'';