我正在尝试将一组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;
这里出了什么问题?
答案 0 :(得分: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
答案 1 :(得分:0)
我现在因其他原因放弃了导入路径,而是在我的应用程序中执行CSV导入。
在处理我从复制的CSV文件的第一行构建的CREATE TABLE
语句时,我得到了与我的SQL代码相同的错误消息。使用十六进制编辑器对SQL文件进行更密切的分析,在粘贴的列名称的开头显示了一个字节顺序标记(BOM)。在消除BOM之后,SQL代码将无需任何进一步的唠叨运行。
我记得我尝试导入的一些文件以BOM开头(之前让我非常头疼) - 因此我认为BOM是“未知令牌”,HSQLDB一直在抱怨。由于BOM是非打印字符,因此它解释了错误消息中未显示任何令牌的原因。
获得的经验教训:消息中未显示任何字符的“无效令牌”错误可能是由于违规输入中的BOM,控制字符或其他非打印内容造成的。十六进制编辑器将揭示这一点。