【问题标题】:Weka Find Database Util Properties But Throwing Driver Not FoundWeka查找数据库实用程序属性但未找到抛出驱动程序
【发布时间】:2016-06-11 12:39:54
【问题描述】:

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

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

这是我的项目结构:

我可以使用下面的代码检索 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

任何想法为什么这是抛出?

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

【问题讨论】:

    标签: mysql maven jdbc weka


    【解决方案1】:

    documentation 表示“这些可以通过在 user.home 或当前目录中创建名为 DatabaseUtils.props 的 java 属性文件来更改”。您的属性文件不符合这些要求(jar 中的属性文件不在文件系统上)。另请参阅Weka manual 的第 14 章。

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

    【讨论】:

    • 感谢您对此的回答。当我使用 Weka 作为 maven 项目来引用附属 Java EE 项目时,我似乎无法在 weka.jar 中更改 DatabaseUtils.props 而不打开 jar 并更改里面的文件。我尝试在另一个资源文件夹中引用DatabaseUtils.props。但是在 weka.jar 中更改这个数据库工具会影响项目环境本身。有什么想法吗?
    • @randytan 我如何阅读文档,文件需要位于当前目录或用户主文件夹(执行进程的用户)的文件系统上,而不是任何 jar 的一部分(其中是资源通常结束的地方)。
    • 理解马克,所以除了打开weka jar并直接更改属性文件之外我没有任何其他选择。
    【解决方案2】:

    我在 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2019-03-22
      • 1970-01-01
      • 2013-02-03
      • 2013-01-08
      相关资源
      最近更新 更多