将 CSV 文件导入 HSQLDB

Posted

技术标签:

【中文标题】将 CSV 文件导入 HSQLDB【英文标题】:Import CSV files into HSQLDB 【发布时间】:2015-08-07 20:16:28 【问题描述】:

我正在尝试将一组 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;

这里出了什么问题?

【问题讨论】:

【参考方案1】:

您尝试执行的命令属于 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

【讨论】:

谢谢,我已经意识到* *DSV_COL_SPLITTER = ; 的东西需要sqltool 并相应地编辑了我的问题。我也读过 TEXT 表,但这不是我想要的——TEXT 表将引用 CSV 文件进行存储,而我想 import 数据库中的数据并放弃 CSV 文件. 创建文本表后,您可以将数据复制到另一个数据库表并释放 CSV。 啊,没想到。如果不是因为我现在选择了不同的道路,那么投票会有所帮助。还是谢谢!【参考方案2】:

我现在因为其他原因放弃了导入路径,而是在我的应用程序中执行 CSV 导入。

在使用 CREATE TABLE 语句(我从复制的 CSV 文件的第一行构建)时,我的 SQL 代码收到了相同的错误消息。使用十六进制编辑器对 SQL 文件进行更仔细的分析后,在粘贴的列名称的开头发现了一个字节顺序标记 (BOM)。消除 BOM 后,SQL 代码将运行,无需任何进一步的唠叨。

我记得我尝试导入的一些文件以 BOM 开头(这让我之前很头疼)——因此我认为 BOM 是 HSQLDB 一直抱怨的“未知令牌”。由于 BOM 是非打印字符,因此它解释了错误消息中未显示标记的原因。

经验教训:消息中未显示任何字符的“无效令牌”错误可能是由于违规输入中的 BOM、控制字符或其他非打印内容。十六进制编辑器会显示这一点。

【讨论】:

以上是关于将 CSV 文件导入 HSQLDB的主要内容,如果未能解决你的问题,请参考以下文章

原因:org.hsqldb.HsqlException: invalid statemnet - 导入 CSV 数据时需要文本表

如何将手机中的csv文件的内容导入到SQLite数据库中

快速将CSV文件导入Excel文件

如何把csv文件导入到sql数据库

将 .csv 文件导入 mongodb

如何把csv文件批量导入到mysql数据库