2012-10-11 40 views
1

我正嘗試使用Duke Fast Deduplication Engine在我工作的公司的數據庫中搜索一些重複記錄。杜克快速重複數據消除:java.lang.UnsupportedOperationException:操作尚未支持?

我從這樣的命令行運行它:

java -cp "C:\utils\duke-0.6\duke-0.6.jar;C:\utils\duke-0.6\lucene-core-3.6.1.jar" no.priv.garshol.duke.Duke --showmatches --verbose .\config.xml 

但我得到一個錯誤:

Exception in thread "main" java.lang.UnsupportedOperationException: Operation no 
t yet supported 
     at sun.jdbc.odbc.JdbcOdbcResultSet.isClosed(Unknown Source) 
     at no.priv.garshol.duke.datasources.JDBCDataSource$JDBCIterator.close(JD 
BCDataSource.java:115) 
     at no.priv.garshol.duke.Processor.deduplicate(Processor.java:152) 
     at no.priv.garshol.duke.Duke.main_(Duke.java:135) 
     at no.priv.garshol.duke.Duke.main(Duke.java:38) 

我的配置文件看起來像這樣:

<duke> 
    <schema> 
     <threshold>0.82</threshold> 
     <maybe-threshold>0.80</maybe-threshold> 
     <path>test</path> 

     <property type="id"> 
       <name>ID</name> 
     </property> 

     <property> 
      <name>LNAME</name> 
      <comparator>no.priv.garshol.duke.comparators.ExactComparator</comparator> 
      <low>0.6</low> 
      <high>0.8</high> 
     </property> 

     <property> 
      <name>FNAME</name> 
      <comparator>no.priv.garshol.duke.comparators.ExactComparator</comparator> 
      <low>0.6</low> 
      <high>0.8</high> 
     </property> 

     <property> 
      <name>MNAME</name> 
      <comparator>no.priv.garshol.duke.comparators.ExactComparator</comparator> 
      <low>0.3</low> 
      <high>0.5</high> 
     </property> 

     <property> 
      <name>SSN</name> 
      <comparator>no.priv.garshol.duke.comparators.ExactComparator</comparator> 
      <low>0.0</low> 
      <high>1.0</high> 
     </property> 

    </schema> 
    <jdbc> 
      <param name="driver-class" value="sun.jdbc.odbc.JdbcOdbcDriver" /> 
      <param name="connection-string" value="jdbc:odbc:VT_DeDupe" /> 
      <param name="user-name" value="aleer" /> 
      <param name="password" value="**" /> 
      <param name="query" value="select SocialSecurityNumber, LastName, FirstName, MiddleName, empssn from T_Employees" /> 

      <column name="SocialSecurityNumber" property="ID" /> 
      <column name="LastName" property="LNAME" /> 
      <column name="FirstName" property="FNAME" /> 
      <column name="MiddleName" property="MNAME" /> 
      <column name="empssn" property="SSN" /> 
    </jdbc> 
</duke> 

一點也沒有沒有真正告訴我什麼是不支持的......我只是嘗試了一下,沒有認真配置。

回答

1

正如mbonaci所說,問題在於JDBC驅動程序的isClosed()方法未實現。即使實施它也不會比簡單地寫「返回關閉」更困難。

我現在爲此問題添加了一個醜陋的解決方法。請做一個「hg拉」,然後再試一次。

+0

以下是解決方法:http://code.google.com/p/duke/source/detail?r=42db1ff65497b5c136272473bc7703ab37d90beb 再次感謝larsga! – leeand00

1

您正在使用哪個Java版本?
sun.jdbc.odbc.JdbcOdbcResultSet.isClosed最早出現在Java 1.6中。並且它在v1.7中仍然看起來像這樣(我沒有在Java 8中檢查過):

public boolean isClosed() throws SQLException { 
    throw new UnsupportedOperationException("Operation not yet supported"); 
} 

因此,不要調用該方法。使用其他方法檢查結果集是否關閉。

或者如果您不能更改代碼,請向項目的作者尋求幫助(關閉RS時,我看到有an effort to solve exception)。

+0

我使用的Java 1.6.0_26 .... – leeand00

+0

我去了,並從hg repo中拉出來,並使用maven3編譯它。新的jar文件會產生相同的錯誤;我假設你所說的修正是在鏈接右側顯示的修訂版本30a12f2fb61c。這似乎是我已經檢查的修訂,但不知道有關二進制文件。 – leeand00