将 CSV 文件导入 HSQLDB
Import CSV files into HSQLDB
我正在尝试将一组 CSV 文件转换为 HSQLDB 数据库。我的第一次尝试是启动 DatabaseManagerSwing
并执行以下代码:
* *DSV_COL_SPLITTER = ;
\mq /home/michael/workspaces/rds-surveyor/lt/it/NAMES.DAT
commit;
被拒绝并显示错误消息:
java.sql.SQLSyntaxErrorException: unexpected token: *
为了至少从 HSQLDB 得到一些响应,我尝试删除第一行,但这只给出了一个稍微不同的错误:
java.sql.SQLSyntaxErrorException: unexpected token:
然后我遇到了 sqltool,在克服了它的各种陷阱之后(你需要 sqltool JAR,以及相同路径或类路径中某处的相同版本的 hsqldb JAR)我 运行完整代码在这里。第一行得到了预期的处理,但是 \mq
命令失败并出现类似的错误:
SEVERE Cause: SQLSyntaxErrorException: unknown token:
我尝试导入的文件如下所示(显示前几行):
CID;LID;NID;NAME;NCOMMENT
25;1;165;Europa;
25;1;167;Italia;
25;1;169;Abruzzo;
25;1;171;Chieti;
25;1;173;Passo Di Lanciano;
25;1;175;Valico Castiglione Messer Marino;
25;1;177;Valico Della Forchetta;
这里出了什么问题?
您尝试执行的命令属于 SqlTool,它是 HSQLDB 的一个单独的命令行客户端,位于 zip 包中的一个单独的 jar 中。指南在这里:http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html
在 DatabaseManagerSwing 中,您可以使用不同的方法为 CSV 文件创建 TEXT 表。 http://hsqldb.org/doc/2.0/guide/texttables-chapt.html
由于其他原因,我现在放弃了导入路径,而是在我的应用程序中进行 CSV 导入。
在使用我从复制的 CSV 文件的第一行构建的 CREATE TABLE
语句时,我的 SQL 代码收到了相同的错误消息。使用十六进制编辑器对 SQL 文件进行更仔细的分析,发现在粘贴的列名称的开头有一个字节顺序标记 (BOM)。删除 BOM 后,SQL 代码将 运行 无需任何进一步的唠叨。
我记得我尝试导入的一些文件以 BOM 开头(这让我之前很头疼)——因此我假设 BOM 是 "unknown token" HSQL DB一直在抱怨。由于 BOM 是一个非打印字符,它解释了为什么错误消息中没有显示标记。
经验教训:消息中未显示任何字符的 "invalid token" 错误可能是由于 BOM、控制字符或违规输入中的其他非打印内容造成的。十六进制编辑器会揭示这一点。
我正在尝试将一组 CSV 文件转换为 HSQLDB 数据库。我的第一次尝试是启动 DatabaseManagerSwing
并执行以下代码:
* *DSV_COL_SPLITTER = ;
\mq /home/michael/workspaces/rds-surveyor/lt/it/NAMES.DAT
commit;
被拒绝并显示错误消息:
java.sql.SQLSyntaxErrorException: unexpected token: *
为了至少从 HSQLDB 得到一些响应,我尝试删除第一行,但这只给出了一个稍微不同的错误:
java.sql.SQLSyntaxErrorException: unexpected token:
然后我遇到了 sqltool,在克服了它的各种陷阱之后(你需要 sqltool JAR,以及相同路径或类路径中某处的相同版本的 hsqldb JAR)我 运行完整代码在这里。第一行得到了预期的处理,但是 \mq
命令失败并出现类似的错误:
SEVERE Cause: SQLSyntaxErrorException: unknown token:
我尝试导入的文件如下所示(显示前几行):
CID;LID;NID;NAME;NCOMMENT
25;1;165;Europa;
25;1;167;Italia;
25;1;169;Abruzzo;
25;1;171;Chieti;
25;1;173;Passo Di Lanciano;
25;1;175;Valico Castiglione Messer Marino;
25;1;177;Valico Della Forchetta;
这里出了什么问题?
您尝试执行的命令属于 SqlTool,它是 HSQLDB 的一个单独的命令行客户端,位于 zip 包中的一个单独的 jar 中。指南在这里:http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html
在 DatabaseManagerSwing 中,您可以使用不同的方法为 CSV 文件创建 TEXT 表。 http://hsqldb.org/doc/2.0/guide/texttables-chapt.html
由于其他原因,我现在放弃了导入路径,而是在我的应用程序中进行 CSV 导入。
在使用我从复制的 CSV 文件的第一行构建的 CREATE TABLE
语句时,我的 SQL 代码收到了相同的错误消息。使用十六进制编辑器对 SQL 文件进行更仔细的分析,发现在粘贴的列名称的开头有一个字节顺序标记 (BOM)。删除 BOM 后,SQL 代码将 运行 无需任何进一步的唠叨。
我记得我尝试导入的一些文件以 BOM 开头(这让我之前很头疼)——因此我假设 BOM 是 "unknown token" HSQL DB一直在抱怨。由于 BOM 是一个非打印字符,它解释了为什么错误消息中没有显示标记。
经验教训:消息中未显示任何字符的 "invalid token" 错误可能是由于 BOM、控制字符或违规输入中的其他非打印内容造成的。十六进制编辑器会揭示这一点。