我正在尝试将简单的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'
我尝试的变化包括:
在所有情况下,我得到相同的结果....关于日期时间格式的投诉。
我正在使用hsqldb-2.3.4
有什么想法吗?
答案 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插入和提交单行数据来查看预期的格式。该行将使用您设置的格式变量保存在新文件中。