原因:org.hsqldb.HsqlException:无效的 statemnet - 导入 CSV 数据时需要文本 table

Caused by: org.hsqldb.HsqlException: invalid statemnet - text table required when importing CSV data

我正在尝试使用 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

P.S。在 HSSQL 客户端中使用它工作正常:

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

您需要对反斜杠进行两次转义。以下代码未显示任何异常。

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();
}