原因: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 数据时需要文本表的主要内容,如果未能解决你的问题,请参考以下文章
“'NSInternalInconsistencyException' 的替代原因,原因:'此 NSPersistentStoreCoordinator 没有持久存储。'”