动态检索数据库模式

时间:2017-06-13 09:11:00

标签: java database jpa eclipselink

我想为我的应用程序编写备份工具,并且必须使用JAVA 1.6。在我的应用程序内部是几个数据库,如derby,mySQL ..此外,还有不同的数据库模式名称。

我正在使用JPA和Eclipselink。

到目前为止,我编写了一个方法,该方法创建了具有特定模式名称的所有表的列表:

    private static List<String> getTableNames(String schema, Connection connection) throws SQLException {
    final String TABLE_NAME = "TABLE_NAME";
    List<String> tableNames = new ArrayList<>();
    DatabaseMetaData dbmd = connection.getMetaData();
    ResultSet tablesRS = dbmd.getTables(null, schema, null, null);
    while (tablesRS.next()) {
        tableNames.add(tablesRS.getString(TABLE_NAME));
    }

    return tableNames;
}

这有效,但我不知道如何获得实际模式名称。我以为我可以通过EntityManager获取架构。但我没有找到任何解决方案。有没有办法通过EntityManager获取我的数据库的架构名称? 有没有更好的方法来动态检索适用于不同数据库的所有表的内容?

注意,我必须使用Java 1.6。

我知道自JAVA 1.7以来getSchema()对象中存在方法connection

1 个答案:

答案 0 :(得分:0)

我刚刚在Java Code Geek找到了解决问题的方法。我以为我必须使用模式来获取所有表。事实并非如此:

public static ArrayList getTablesMetadata() throws SQLException {
    String table[] = { "TABLE" };
    ResultSet rs = null;
    ArrayList tables = null;
    // receive the Type of the object in a String array.
    rs = metadata.getTables(null, null, null, table);
    tables = new ArrayList();
    while (rs.next()) {
        tables.add(rs.getString("TABLE_NAME"));
    }
    return tables;
}