Weka查找数据库Util属性但未找到投掷驱动程序

时间:2016-02-28 13:38:01

标签: mysql maven jdbc weka

我使用MAVEN使用Weka 3.7.13 dev版本构建一个简单的weka应用程序。我已初始化pom.xml函数以从存储库中获取weka库。

我想使用weka运行一个简单的聚类算法,并将其连接到MySQL数据库。根据文档,weka需要有一个DatabaseUtil.props文件,其中包含它的jdbc驱动程序。我已经设置好了。

这是我的项目结构:

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文件无法覆盖默认驱动程序值jdbc:idb=experiments.prp

为什么会抛出这个想法?

任何反馈和回答都非常感谢。

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

documentation“可以通过在user.home或当前目录”中创建名为DatabaseUtils.props的java属性文件来更改这些内容。您的属性文件与这些要求不匹配(jar中的属性文件不在文件系统上)。另见Weka manual

的第14章

另一种解决方案是使用setDatabaseURL在代码中设置网址。只要JDBC驱动程序在类路径上,这应该可以工作。