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

Posted

技术标签:

【中文标题】原因:org.hsqldb.HsqlException: invalid statemnet - 导入 CSV 数据时需要文本表【英文标题】:Caused by: org.hsqldb.HsqlException: invalid statemnet - text table required when importing CSV data 【发布时间】:2016-09-15 06:34:38 【问题描述】:

我正在尝试使用 java 和这个 SQL 语句将 CSV 数据导入 HSSQL 数据库:

statement.execute("set TABLE data_source source 'data.csv;ignore_first=true;fs=\\semi'");

但我收到此错误:

Exception in thread "main" java.sql.SQLException: invalid statemnet - text table required in statement [set TABLE data_source source 'data.csv;ignore_first=true;fs=\semi']
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
    at com.test.Application.main(Application.java:53)
Caused by: org.hsqldb.HsqlException: invalid statemnet - text table required
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.StatementCommand.getResult(Unknown Source)
    at org.hsqldb.StatementCommand.execute(Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 3 more

附:在 HSSQL 客户端中使用它可以正常工作:

set TABLE data_source source 'data.csv;ignore_first=true;fs=\semi'

【问题讨论】:

【参考方案1】:

您需要两次转义反斜杠。以下代码没有显示任何异常。

public static void main(String[] args) throws Exception 
    Connection connection = DriverManager.getConnection("jdbc:hsqldb:file:~/swdev/hsqldb/testdb", "SA", "");
    PreparedStatement statement = connection.prepareCall("create text TABLE data_source (id INTEGER)");
    statement.execute();
    statement.close();
    statement = connection.prepareCall("set TABLE data_source source 'data.csv;ignore_first=true;fs=\\\\semi'");
    statement.execute();
    statement.close();
    connection.close();

【讨论】:

@zygimantus 编辑了我的答案。运行代码时遇到什么错误。似乎对我有用。 你用过哪个版本的hsqldb?我正在使用 2.3.4 最新版本,2.3.4。如果你运行代码会发生什么? 你的代码对我来说很好用,我会尽快添加对我来说失败的完整代码。 啊,我明白了。您更新了问题。您试图在不是 TEXT 表的表上使用它。请参阅我的创建表语句。

以上是关于原因:org.hsqldb.HsqlException: invalid statemnet - 导入 CSV 数据时需要文本表的主要内容,如果未能解决你的问题,请参考以下文章

rca根本原因分析法是啥意思

ip、端口 连接失败问题常见原因

在MYSQL里 段错误 是啥原因

“'NSInternalInconsistencyException' 的替代原因,原因:'此 NSPersistentStoreCoordinator 没有持久存储。'”

Oracle连接太慢的原因及TNS无监听程序

ios 开发证书被撤销是啥原因