2016-02-28 61 views
0

我使用MAVEN使用Weka 3.7.13 dev版本構建了一個簡單的weka應用程序。我已初始化pom.xml函數以從存儲庫中獲取weka庫。Weka查找數據庫Util屬性但未找到投擲驅動程序

我想使用weka運行一個簡單的聚類算法,並將其連接到MySQL數據庫。根據文檔,weka需要有一個包含它的jdbc驅動程序的DatabaseUtil.props文件。我已經設置好了。

這是我的項目結構:

enter image description here

我可以用我下面的代碼檢索的DatabaseUtils.props。但不知何故weka本身無法識別我已經在裏面配置的jdbc:Url and driver名稱。

DatabaseUtil.props文件:

# JDBC driver (comma-separated list) 
jdbcDriver=com.mysql.jdbc.Driver 

# database URL 
jdbcURL=jdbc:mysql://127.0.0.1:3306/datamining 
我觸發了Weka模塊

Java代碼:

public void dm(){ 
     int cluster = 4; 
     InstanceQuery clusterQuery = null; 
     try{    
      //file reader of database utilities properties 
      ClassLoader classLoader = getClass().getClassLoader(); 
      File fileProps = new File(classLoader.getResource("DatabaseUtils.props").getFile()); 

      //setup the data preparation functionality then connect to database 
      clusterQuery = new InstanceQuery(); 
       clusterQuery.setUsername("test"); 
       clusterQuery.setPassword("test"); 
       clusterQuery.setQuery("SELECT * FROM TEMP_KMEANS"); 
       clusterQuery.setCustomPropsFile(fileProps); 

但是,當執行函數返回錯誤:java.sql.SQLException: No suitable driver found for jdbc:idb=experiments.prp

看來,DatabaseUtils.props文件不能覆蓋默認的驅動程序值​​

任何想法,爲什麼這是投擲?

任何反饋和回答非常感謝。

回答

0

documentation說:「這些可以通過創建一個Java屬性文件中的user.home或當前目錄中稱爲的DatabaseUtils.props改變」。您的屬性文件不符合這些要求(jar中的屬性文件不在文件系統中)。另見Weka manual的第14章。

另一種解決方案是使用setDatabaseURL在代碼中設置網址。只要JDBC驅動程序在類路徑上,這應該可以工作。

+0

謝謝你對此的回答。當我使用Weka作爲maven項目來引用輔助java EE項目時,似乎我無法在不打開jar並更改其中的文件的情況下更改weka.jar中的'DatabaseUtils.props'。我嘗試在另一個資源文件夾中引用'DatabaseUtils.props'。但是在weka.jar中更改這個數據庫utils會影響項目環境本身。有任何想法嗎? – randytan

+0

@randytan如何閱讀文檔,該文件需要位於當前目錄中的文件系統或用戶主文件夾(執行該進程的用戶),而不是任何jar的一部分(這是資源正常結束的地方) 。 –

+0

瞭解馬克,所以我沒有任何其他選項,除了打開weka jar並直接更改屬性文件。 – randytan

1

我在src/main/resources文件夾中創建了一個DatabaseUtils.props文件,並編寫了下面的代碼。它爲我工作,我使用weka 3.8.0。

 File file = new File(getClass().getClassLoader().getResource("DatabaseUtils.props").toURI()); 


     InstanceQuery query = new InstanceQuery(); 

     query.setCustomPropsFile(file); 
     query.setUsername(MYSQL_USER); 
     query.setPassword(MYSQL_PASSWORD); 
     query.setQuery("select * from Action"); 

     instances = query.retrieveInstances(); 

     System.out.println(instances.toString()); 
相關問題