将列标题插入hsqldb文本文件

时间:2014-01-23 05:08:33

标签: java csv hsqldb

我正在修改其他人的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表源字符串无效

我希望你能提供帮助,即使要确认这是不可能的。谢谢, 乔斯林

2 个答案:

答案 0 :(得分:0)

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

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

您使用的是双引号。

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

答案 1 :(得分:0)

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

数据库DL和docs的网站是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 ...