将列标题插入 hsqldb 文本文件

Posted

技术标签:

【中文标题】将列标题插入 hsqldb 文本文件【英文标题】:inserting column headings into hsqldb text file 【发布时间】:2014-01-23 05:08:33 【问题描述】:

我正在修改别人的 Java 代码,边走边学 Java。 :-)。我正在编写 hsqldb TEXT 文件,我希望最终文件有一个“标题”行,以便它们可以更容易地理解为纯文本。 hsqldb 有一个开关 'ignore_first=true' 用于读取此类文件,但我找不到写入该行的方法。它可能不存在,但文档中有对 SOURCE HEADER 的诱人引用。有谁知道如何使用它? 这是我尝试过的简化示例:

    String createtextTable =  
        "CREATE TEXT TABLE MolSet (" +
            " id INT NOT NULL IDENTITY," +
            " filename VARCHAR(300)," +
            " expSolFilename VARCHAR(300)," +
            " variance DOUBLE" +  ");" ;

    String headingsTable = "id,filename,expSolFilename, variance";

    try
    
        stmt = conn.createStatement();

        stmt.execute(createtextTable);
        setTableStmt = "SET TABLE " + “MolSet” + " SOURCE " +
            '"' + TABLES[0] + ".csv;ignore_first=true" + '"';
        stmt.execute(setTableStmt);

        headingStmt = "SET TABLE " + “MolSet” + " SOURCE HEADER " +
            '"' + headingsTable + '"';
        stmt.execute(headingStmt);
    
    catch( SQLException sqle )
    
        return false;
    


    return true;

这给出了 sql 错误: 语句 [SET TABLE MolSet SOURCE HEADER] 中的 TEXT 表源字符串无效

希望你能帮忙,即使是确认也是不可能的。谢谢, 乔斯林

【问题讨论】:

【参考方案1】:

源和源头字符串必须用单引号括起来:

  SET TABLE MolSet SOURCE HEADER 'id,filename,expSolFilename,variance'

您使用了双引号。

编辑:答案是最新版本。自 1.8.x 以来的旧版本支持这一点,但可能需要双引号。表头和表中的列数必须匹配。或者,您可以在数据库离线时编辑文本源并自己添加标题。

【讨论】:

谢谢,尝试更改为单引号 - 得到相同的错误消息。在 sourceforge.net/p/hsqldb/discussion/73674/thread/4a01f5f9 的讨论中,有人问了类似的问题,(没有满意的答案)答案使用了双引号。乔斯林 我问了两周后,唯一的答案是不正确的。我想这意味着这是不可能的。或者我可能需要安装最新的 hsqldb,而不是与我的程序一起打包的那个,但这有它自己的问题【参考方案2】:

此 SQL 文件可用于从表中生成 CSV 文本文件,还可以设置字段标题。它特定于 HSQLDB(版本 1.8.1.3)。

数据库 DL 和文档的网站是 HSQLDB.ORG

希望对你有帮助。

-- ========================
-- MAKE TABLE TEXT_TABLE_01
-- ========================

DROP TABLE TEXT_TABLE_01 IF EXISTS;

CREATE TEXT TABLE TEXT_TABLE_01
    ( ID_NUMBER  INTEGER
    , FIRST_NAME VARCHAR(30)
    , LAST_NAME  VARCHAR(30)
    , DEAR_      VARCHAR(50)
    )
;

SET TABLE TEXT_TABLE_01 SOURCE "TEXT_TABLE_01.TXT;ignore_first=true;fs=:";
SET TABLE TEXT_TABLE_01 SOURCE HEADER "ID_NUMBER:FIRST_NAME:LAST_NAME:DEAR_";


INSERT INTO TEXT_TABLE_01
        ( ID_NUMBER, FIRST_NAME, LAST_NAME, DEAR_ )
    SELECT
          ID_NUMBER, FIRST_NAME, SURNAME,   DEAR_
    FROM
        TMP_NON_PERSONAL
;

SELECT * FROM TEXT_TABLE_01;

SET TABLE TEXT_TABLE_01 SOURCE OFF;

-- DELETE ALL TEXT FILES WHEN FINISHED ... OR BEFORE STARTING ...

【讨论】:

以上是关于将列标题插入 hsqldb 文本文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 hsqldb 数据库中存储文本和二进制文件?

HSQLDB 结果集 - 如何获取没有引号的 HSQLDB 返回空间作为空格且不为空?

使用 python 将列文本数据转换为特征以用于机器学习

HSQLDB 文本搜索性能

Oracle SQL:从大型文本文件运行插入语句

插入多个文本文件