[英]Java - I cannot view tables in preset mysql databases but can view on user-created databases
我的代码有一个非常严重的问题,我正在开发数据库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中选择数据库,因为我将要在所有数据库上工作。
我什至进行了一项测试,当单击每个数据库时,该对话框会在对话框中显示每个数据库的名称,并且效果很好。
可能是权限问题。 根拥有对所有系统信息的完全访问权限。 但是,个人用户受到的限制更大(引用从http://forums.mysql.com/read.php?20,585682,585683#msg-585683复制):
每个MySQL用户都有权访问这些表,但只能看到表中与该用户具有适当访问权限的对象相对应的行。 在某些情况下(例如,INFORMATION_SCHEMA.ROUTINES表中的ROUTINE_DEFINITION列),特权不足的用户将看到NULL。 这些限制不适用于InnoDB表。 您只能以PROCESS权限查看它们。
相同的特权适用于从INFORMATION_SCHEMA中选择信息并通过SHOW语句查看相同的信息。 无论哪种情况,您都必须对对象具有某种特权才能查看有关该对象的信息。
要授予用户对所有数据库的完全访问权限,可以键入此命令(以root用户或具有“ grant option”的用户):
GRANT ALL ON *.* TO 'someuser'@'somehost';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.