【发布时间】:2013-12-05 16:51:37
【问题描述】:
我的代码有一个非常严重的问题,我正在开发一个数据库 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 中选择数据库,因为我将处理所有数据库..
我什至运行了一个测试,当单击每个数据库时,它会在对话框中显示每个数据库名称,并且效果很好。
【问题讨论】:
标签: java mysql database tree jtree