我在 NetBeans 中看不到或编辑 MySQL 存储过程

Posted

技术标签:

【中文标题】我在 NetBeans 中看不到或编辑 MySQL 存储过程【英文标题】:I can't see or edit MySQL stored procedures in NetBeans 【发布时间】:2019-04-05 09:19:01 【问题描述】:

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

在 NetBeans 中左侧,在 Workbench 中右侧:

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

【问题讨论】:

您可能需要考虑更新到更新版本的驱动程序,5.1.23 是 MySQL Connector/J 的一个相当旧的版本 我将 MySQL 连接器/J 更新到 5.1.47,但仍然无法在 NetBeans 中看到过程。然后我将连接器更新到版本 8.0.13,应该是最后一个版本,同样的事情,我看不到我的程序。 其他人能否确认在 NetBeans 中的过程存在相同问题? 【参考方案1】:

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

这是我正在使用的 info netbeans

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

【讨论】:

我有完全相同的 NetBeans 版本(内部版本 201609300101) 你使用什么 MySQL 版本和连接器版本? 我使用连接版本:mysql-connector-java-5.1.18-bin.jar MySQL 版本 5.5.38 没办法,我从这个 FTP 站点ftp.jaist.ac.jp/pub/mysql/Downloads 下载了数据库 5.5.62 和 JDBC Connector 5.1.8 并安装了它们。但是还是不行,所以跟版本无关!【参考方案2】:

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

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

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

【讨论】:

请更新原帖。 [1] 在 netbeans 中单击程序节点时,View - IDE Log 中是否有任何 jdbc 或 mysql 相关消息? [2]你能看到其他数据库中的函数的其他过程吗?【参考方案3】:

可能有两个原因:

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,看不到过程和函数:

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

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等声明选项。

【讨论】:

我使用 root 用户并执行以下响应; [Warning, Error code 1.146, SQLState 42S02] Table 'mysql.proc' doesn't exist [1:1] Failed in 0 s. [Exception, Error code 1.146, SQLState 42S02] Table 'mysql.proc' doesn't exist Line 1, column 1 Execution finished after 0,015 s, 1 error occurred. 似乎 MySQL 8.0 版没有 mysql.proc 表(见ocelot.ca/blog/blog/2017/08/22/no-more-mysql-proc-in-mysql-8-0)我使用 MySQL 8.0.19(不是 MariaDB) 显然 NetBeans 中的这部分代码应该替换为:SELECT routine_name,routine_type FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type IN ('FUNCTION','PROCEDURE')(如果这是负责将 MySQL 例程提取到导航树中的代码) @sbrbot,没错!我认为我们应该解雇一个错误。作为一种解决方法,您可以尝试创建一个视图并将其命名为 mysql.proc 并将其引用到 information_schema.routines。有可能吗? 确实,聪明的尝试,正如你所建议的,我成功地创建了 mysql.proc 视图,显示来自 INFORMATION_SCHEMA 的例程的名称和类型,但不幸的是,NetBeans 仍然没有在树中显示过程。我可以从 NetBeans 控制台中的视图中选择并查看过程和函数,但它们不会填充树。因此,您之前指出的代码可能不是负责此目的的代码。请参阅我的上一篇文章。【参考方案4】:

证明它是解决方案。

【讨论】:

【参考方案5】:

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

【讨论】:

你应该阅读 cmets:ocelot.ca/blog/blog/2017/08/22/no-more-mysql-proc-in-mysql-8-0

以上是关于我在 NetBeans 中看不到或编辑 MySQL 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

在 cpanel 中看不到/上传我的 .env 文件

Netbeans:包 com.mysql 不存在

Netbeans + Scala + play-framework:找不到 index.html

如何将 NetBeans 连接到 MySQL 数据库?

我在 PhpStorm 的代码完成中看不到边框颜色属性

为啥我在最新的 DataGrip 中看不到“添加到收藏夹”?