带有CSV表源的HSQLDB - 不接受日期格式

时间:2017-02-03 14:27:17

标签: date csv hsqldb

我正在尝试将简单的CSV文件作为HSQL数据库的源。 我在约会时被阻止,收到以下错误:

Exception in thread "main" java.sql.SQLException: bad TEXT table source file - line number: 1 org.hsqldb.HsqlException: data exception: invalid datetime format in statement [SET TABLE Patient SOURCE "queryDbTest.csv;fs=,;vs=,"]
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)

我尝试了很多变种,都失败了同样的错误。正在读取文件,并且在调试它时,我发现在解析日期时失败了,据我所知,这个日期是正确的日期格式。

我的代码如下

    System.setProperty("textdb.allow_full_path", "true");

    Class.forName("org.hsqldb.jdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");

    Statement st = conn.createStatement();
    st.execute("CREATE TEXT TABLE Patient (" +
                    "HospitalNumber VARCHAR(100), " +
                    "NHS_Number VARCHAR(100), " +
                    "Name VARCHAR(100), " +
                    "other_names VARCHAR(100), " +
                    "dob Date, " +
                    "address VARCHAR(200))");

    st.execute("SET TABLE Patient SOURCE \"" + "queryDbTest.csv" + ";all_quoted=true;fs=,;qc=\\quote\"");

和我的CSV

'1234', 'N998877', 'Smith', 'Mary', '1999-12-01', 'an address 1'

我尝试的变化包括:

  1. 使用'DateTime'作为列类型
  2. 在CSV文件中使用DateTime格式(i..e,yyyy-MM-dd HH:MM:SS)
  3. 在CSV中使用时间戳格式(即yyyy-MM-dd HH:MM:ss.SSSSS)
  4. 在CSV中使用null作为日期值。
  5. 在csv文件中的日期值前面加上“DATE”字样
  6. 在所有情况下,我得到相同的结果....关于日期时间格式的投诉。

    我正在使用hsqldb-2.3.4

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在TEXT表源文件中,DATE列应该是数据字符串,不带DATE字样。

'1234', 'N998877', 'Smith', 'Mary', '1999-12-01', 'an address 1'

当您使用单引号作为引号字符时,应将其指定为qc

st.execute("SET TABLE Patient SOURCE \"" + "queryDbTest.csv" + ";all_quoted=true;fs=,;qc=\\apos\"");

您可以通过将表文本源设置为不存在的文件并使用JDBC插入和提交单行数据来查看预期的格式。该行将使用您设置的格式变量保存在新文件中。