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

Posted

技术标签:

【中文标题】JDBC - 从 OpenOffice 数据库中获取所有表名【英文标题】:JDBC - Get all Table names from OpenOffice Database 【发布时间】:2014-07-23 16:54:14 【问题描述】:

潜伏好久,第一次提问。

我尝试搜索如何从使用 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_CROs-s-rEFERENCE
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】:

我找到了解决此问题的方法,以防其他人也遇到此问题。问题是 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_* 表的怪物,但现在我实际上也得到了我想要的表。从那里我想我可以弄清楚如何获取这些随机表。

【讨论】:

以上是关于JDBC - 从 OpenOffice 数据库中获取所有表名的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 应用程序中读取 OpenOffice 文档电子表格?

openoffice能打开word文件么?

从 flex (air) 将文档与 OpenOffice 合并

使用 xslt 过滤器从 Calc 导出时出现 OpenOffice 错误

从 Writer 宏打开 OpenOffice 电子表格

如何从 Perl 创建或读取 OpenOffice 电子表格?