首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HSQLDB:从CSV读取数据的怪异“唯一约束或索引违反”

HSQLDB:从CSV读取数据的怪异“唯一约束或索引违反”
EN

Stack Overflow用户
提问于 2010-08-25 02:21:36
回答 2查看 9.8K关注 0票数 1

我有一个工具,它读取CSV文件,使用HSQLDB从中选择,并将结果保存为另一个CSV文件。这里有更多信息:http://ondra.zizka.cz/stranky/programovani/java/apps/CsvCruncher-csv-manipulation-sql.texy

现在,当我用它做一些工作时,我得到了:

java -jar CsvCruncher-1.0.jar result.csv foo.csv 'SELECT * FROM indata'

代码语言:javascript
复制
INFO:   SQL: CREATE TEXT TABLE indata ( xrelease VARCHAR(255), xtype VARCHAR(255), xartifact VARCHAR(255), xversion VARCHAR(255) )
INFO:   SQL: CREATE TEXT TABLE output ( XRELEASE VARCHAR(255), XTYPE VARCHAR(255), XARTIFACT VARCHAR(255), XVERSION VARCHAR(255) )
INFO:   User's SQL: INSERT INTO output (SELECT * FROM indata)
INFO: Database closed
Exception in thread "main" java.sql.SQLException: integrity constraint violation: unique constraint or index violation: SYS_IDX_10027
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
    at org.jboss.qa.cvscruncher.Cruncher.crunch(Cruncher.java:187)
    at org.jboss.qa.cvscruncher.App.main(App.java:26)
    at Crunch.main(Crunch.java:9)
Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: SYS_IDX_10027
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.index.IndexAVL.insert(Unknown Source)
    at org.hsqldb.persist.RowStoreAVLDiskData.indexRow(Unknown Source)
    at org.hsqldb.Table.insertSingleRow(Unknown Source)
    at org.hsqldb.StatementDML.insertRowSet(Unknown Source)
    at org.hsqldb.StatementInsert.getResult(Unknown Source)
    at org.hsqldb.StatementDMQL.execute(Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more

从日志中可以看出,没有创建索引,至少没有解释。我试图在HSQLDB的手册中找到一些自动创建的约束,但没有找到.

当我只做SELECT 1 FROM indata的时候,就没事了。所以我想这是数据本身的问题。对于这种情况,它们是:http://pastebin.com/8QiY2HXx (用于防止关键字冲突的x)。

更新:

当我转储从CSV读取的数据时,有点奇怪:

代码语言:javascript
复制
 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.apache.maven:maven-ant-tasks
5XVERSION: 2.0.9
 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.jboss.seam.integration:jboss-seam-int-microcontainer
5XVERSION: 5.1.0.CR1
 -------
 XRELEASE: 5.1.0-SNAPSHOT
 XTYPE: DEP
 XARTIFACT: org.jboss.seam.integration:jboss-seam-int-jbossas
5XVERSION: 5.1.0.CR1
 -------
...

似乎xversion列是以某种方式修改的。代码是简单的System.out.println(" "+ metaData.getColumnLabel(i) + ": "+ rs.getObject(i) );

知道是什么导致的吗?

谢谢,Ondra

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-25 22:42:23

问题是在输入文件中--它将0x0D作为换行符,并以某种方式破坏了HSQLDB。我会报告的,这样他们就可以检查了。至少它应该拒绝无效的输入,或者更好地转换换行符。

票数 4
EN

Stack Overflow用户

发布于 2010-08-25 15:25:31

请检查数据库的.script和.log文件。这将显示数据库中的实际表定义。如果找不到原因,那么使用示例数据文件通过(请参阅“支持”页面)向HSQLDB报告一个bug。虫子很快就修好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3562435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档