Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能';在NetBeans中看不到或编辑MySQL存储过程_Java_Mysql_Stored Procedures_Jdbc_Netbeans - Fatal编程技术网

Java 我能';在NetBeans中看不到或编辑MySQL存储过程

Java 我能';在NetBeans中看不到或编辑MySQL存储过程,java,mysql,stored-procedures,jdbc,netbeans,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中左侧,在Work

我可以使用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中右侧:


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

我正在使用NetBeans 8.2修补程序2,可以显示存储过程

这是我正在使用的info netbeans


我想你应该重新安装完整版本的netbeans。

我还没有找到解决这个问题的方法,这真让人恼火。这个问题已经有一年多的历史了。NetBeans从8.2、9、10更改为11.2,现在我使用11.2,但此功能仍然不起作用!我更改了MySQL版本、NetBeans版本、JDBC驱动程序版本!!!我必须与干扰NetBeans的机器的区域设置相关

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

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


可能有两个原因:

1.用户没有访问mysql.proc的权限 NetBeans使用类似的方法来获取过程和函数的列表():

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

请看屏幕截图。在第一个模式中,root用户可以访问mysql模式,您可以看到包括mysql在内的所有系统模式。在第二种情况下,用户只能访问信息模式和性能模式,无法查看过程和功能:

尝试向用户添加对MySQL模式的访问权限。在workbench中,转到服务器->用户和权限->架构权限:

2.8.0 mysql中没有mysql.proc 同样,NetBeans广泛使用
mysql.pros
来获取有关过程和函数的元数据(参见中)。我想我们可以得到一个简单的解决方法,就是创建一个模仿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编辑过程,因为它无法获取完整的元数据。例如,它无法获得声明选项,例如
确定性SQL安全调用程序

证明它是解决方案


将mysql.proc上的所有权限授予“@”

您可能想考虑更新到驱动程序的更新版本,5.1.23是MySQL连接器/JI更新的MySQL连接器/J到5.1.47的一个非常旧的版本,并且仍然无法在NETBeCes中查看程序。然后我将connector更新为8.0.13版,应该是最新版本,同样的,我看不到我的过程。其他人是否可以确认NetBeans中的过程存在相同的问题?我有完全相同的NetBeans版本(Build 201609300101)您使用的MySQL版本和连接器版本是什么?我使用的是connect版本:MySQL-connector-java-5.1.18-bin.jar MySQL版本5.5.38不可能,我从这个FTP站点下载了数据库5.5.62和JDBC连接器5.1.8并安装了它们。但是仍然不起作用,所以它不是最新版本!请更新原来的帖子。[1] 单击netbeans中的过程节点时,View-IDE日志中是否有任何与jdbc或mysql相关的消息?[2] 你能在其他数据库中看到函数的其他过程吗?我使用root用户并进行以下响应<代码>[警告,错误代码1.146,SQLState 42S02]表“mysql.proc”不存在[1:1]在0秒内失败。[异常,错误代码1.146,SQLState 42S02]表'mysql.proc'不存在第1行,第1列执行在0015秒后完成,出现1个错误。
版本8.0中的mysql似乎没有mysql.proc表(请参阅)我使用的是mysql 8.0.19(不是MariaDB)显然,NetBeans中的这部分代码应该替换为:
SELECT routine\u name,routine\u type FROM INFORMATION\u SCHEMA.ROUTINES WHERE routine\u type IN('FUNCTION','PROCEDURE')
(如果这是负责将MySQL例程提取到导航树中的代码)@sbrbot,没错!我想我们应该发射一只虫子。作为一种解决方法,您可以尝试创建一个视图,将其命名为mysql.proc,并将其引用到information_schema.routines。可能吗?确实,正如您所建议的,我成功地创建了mysql.proc视图,其中显示了信息模式中例程的名称和类型,但不幸的是,NetBeans仍然没有在树中显示过程。我可以从NetBeans控制台的视图中进行选择,并查看过程和函数,但它们不填充树。因此,您之前指出的代码可能不是负责此目的的代码。见上面我的上一篇文章。
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