我的代码有一个非常严重的问题,我正在开发一个数据库GUI应用程序。这个应用程序的目标是提供一个界面来管理类似于phpMyAdmin的databases..Its。我正在获取所有的数据库,并在JTree上显示它们,在单击每个数据库时,将其表显示为树叶。我现在的问题是,除了那些随mysql安装而来的数据库(Information_schema、mysql、test、performance_schema..etc)之外,所有的数据库都像预期的那样显示了它们的表。树上不显示括号中每个数据库下的表,只显示用户创建的databases..ie上的表。那些数据库是我自己创建的。但是显示的是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();
}在我的Database类中,我有以下字段
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中选择数据库,因为我将处理所有数据库。
我甚至运行了一个测试,当单击每个数据库时,它会在对话框中显示每个数据库的名称,并且运行良好。
发布于 2013-12-06 01:06:47
这可能是权限问题。Root拥有所有系统信息的完全访问权限。但是,单个用户受到更多限制(从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 ALL ON *.* TO 'someuser'@'somehost';https://stackoverflow.com/questions/20405900
复制相似问题