gpt4 book ai didi

Java - 我无法查看预设 mysql 数据库中的表,但可以查看用户创建的数据库

转载 作者:行者123 更新时间:2023-11-30 00:57:50 24 4
gpt4 key购买 nike

我的代码有一个非常严重的问题,我正在开发数据库 GUI 应用程序。该应用程序的目的是提供一个管理数据库的界面。它有点像 phpMyAdmin 的东西。我正在获取所有数据库并将它们显示在 JTree 上,单击每个数据库后将其表显示为叶子。我现在的问题是,所有数据库都按预期显示其表,除了那些随 mysql 安装一起提供的数据库(我的意思是(Information_schema、mysql、test、performance_schema..etc))。括号中每个数据库下的表未显示在树上,仅显示用户创建的数据库上的表。我自己创建的那些数据库。但是显示了 mysql 安装附带的数据库,但每个数据库都有空表。我不知道我的连接 URL 中是否遗漏了某些内容。代码的可能摘要如下:

public static Connection getConnection(Database database) throws SQLException {
try {
Class.forName(database.getDriver()).newInstance();

Properties property = new Properties();
property.setProperty("user", database.getUser().getUsername());
property.setProperty("password", database.getUser().getPassword());

connection = DriverManager.getConnection(database.getUrl(), property);

} catch (SQLException | InstantiationException | IllegalAccessException ClassNotFoundException ex) {
ex.printStackTrace();
}
return connection;
}

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Databases");

JTree tree = new JTree(root);

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();

try {
DatabaseMetaData databaseMetaData = getDatabaseMetaData(database);

ResultSet resultSet = databaseMetaData.getCatalogs();

while (resultSet.next()) {
DefaultMutableTreeNode db = new DefaultMutableTreeNode(resultSet.getString("TABLE_CAT"));
root.add(db);
getDatabaseTableTree(database, tree, db);
}
} catch (SQLException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}

public static DatabaseMetaData getDatabaseMetaData(Database database) throws SQLException {
return getConnection(database).getMetaData();
}

在我的数据库类中,我有以下字段

private String driver = "com.mysql.jdbc.Driver";
private String databaseName = "";
private String url = "jdbc:mysql://localhost:3306/";
private User user = null;
private String tableName = "";

还有所有这些方法的 getter 和 setter 方法,这就是为什么你看到我在上面的代码中调用 getter 和 setter 方法..

我希望我至少能够描述我的挑战,足以满足您通常的解决方案。

我选择不在上面的 URL 中选择数据库,因为我将处理所有数据库..

我什至运行了一个测试,当单击每个数据库时,在对话框中显示每个数据库名称,并且效果很好。

最佳答案

这可能是权限问题。 Root 拥有所有系统信息的完全访问权限。然而,个人用户受到更多限制(引用自http://forums.mysql.com/read.php?20,585682,585683#msg-585683复制):

Each MySQL user has the right to access these tables, but can see only the rows in the tables that correspond to objects for which the user has the proper access privileges. In some cases (for example, the ROUTINE_DEFINITION column in the INFORMATION_SCHEMA.ROUTINES table), users who have insufficient privileges see NULL. These restrictions do not apply for InnoDB tables; you can see them with only the PROCESS privilege.

The same privileges apply to selecting information from INFORMATION_SCHEMA and viewing the same information through SHOW statements. In either case, you must have some privilege on an object to see information about it.

要授予用户对所有数据库的完全访问权限,您可以键入以下内容(作为 root 或具有“授予选项”的用户):

GRANT ALL ON *.* TO 'someuser'@'somehost';

关于Java - 我无法查看预设 mysql 数据库中的表,但可以查看用户创建的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com