JDBC - 从OpenOffice数据库获取所有表名

时间:2014-07-23 16:54:15

标签: java sql jdbc resultset

长时间潜伏,第一个提问时间。

我尝试使用JDBC搜索如何从使用OpenOffice创建的数据库中获取所有表,虽然我找到了适用于其他人的答案,但它们对我不起作用。代码本身实际上会返回一些东西,但它会返回一些完全出乎意料的东西。

我的代码:

    try {
        DatabaseMetaData md = conn.getMetaData();
        rs = md.getTables(null, null, "%", null);

        while (rs.next()) {
            tableNames.add(rs.getString(3));
            System.out.println(rs.getString(3));
        }

    }
    catch (Exception e) {
        System.out.println("error in sendConnection()");
    }

输出:

SYSTEM_ALIASES
SYSTEM_ALLTYPEINFO
SYSTEM_AUTHORIZATIONS
SYSTEM_BESTROWIDENTIFIER
SYSTEM_CACHEINFO
SYSTEM_CATALOGS
SYSTEM_CHECK_COLUMN_USAGE
SYSTEM_CHECK_CONSTRAINTS
SYSTEM_CHECK_ROUTINE_USAGE
SYSTEM_CHECK_TABLE_USAGE
SYSTEM_CLASSPRIVILEGES
SYSTEM_COLLATIONS
SYSTEM_COLUMNPRIVILEGES
SYSTEM_COLUMNS
SYSTEM_CROSSREFERENCE
SYSTEM_INDEXINFO
SYSTEM_PRIMARYKEYS
SYSTEM_PROCEDURECOLUMNS
SYSTEM_PROCEDURES
SYSTEM_PROPERTIES
SYSTEM_ROLE_AUTHORIZATION_DESCRIPTORS
SYSTEM_SCHEMAS
SYSTEM_SCHEMATA
SYSTEM_SEQUENCES
SYSTEM_SESSIONINFO
SYSTEM_SESSIONS
SYSTEM_SUPERTABLES
SYSTEM_SUPERTYPES
SYSTEM_TABLEPRIVILEGES
SYSTEM_TABLES
SYSTEM_TABLETYPES
SYSTEM_TABLE_CONSTRAINTS
SYSTEM_TEXTTABLES
SYSTEM_TRIGGERCOLUMNS
SYSTEM_TRIGGERS
SYSTEM_TYPEINFO
SYSTEM_UDTATTRIBUTES
SYSTEM_UDTS
SYSTEM_USAGE_PRIVILEGES
SYSTEM_USERS
SYSTEM_VERSIONCOLUMNS
SYSTEM_VIEWS
SYSTEM_VIEW_COLUMN_USAGE
SYSTEM_VIEW_ROUTINE_USAGE
SYSTEM_VIEW_TABLE_USAGE

返回什么,我该如何解决或解决这个问题?提前谢谢!

编辑:创建的数据库默认情况下,OpenOffice似乎是嵌入式数据库。这可能导致问题。试着把它转换成别的东西,看看会发生什么。

1 个答案:

答案 0 :(得分:1)

我找到了解决此问题的方法,以防其他人遇到此问题。问题是OpenOffice将数据库保存为基本文件,其下有hsqldb。你需要让它只是一个普通的hsqldb。

我使用这两个链接作为资源:

http://programmaremobile.blogspot.com/2009/01/java-and-openoffice-base-db-through.html

https://forum.openoffice.org/en/forum/viewtopic.php?f=83&t=65980

简而言之,您需要提取.odb文件,进入目录并找到包含4个其他文件的数据库目录。为它们添加前缀,然后像平常一样访问它。

我仍然得到了SYSTEM_ *表格的怪异,但现在我实际上也得到了我想要的表格。从那里我想我可以弄清楚如何获得那些随机表。