我使用MAVEN使用Weka 3.7.13 dev版本构建一个简单的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
为什么会抛出这个想法?
任何反馈和回答都非常感谢。
答案 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驱动程序在类路径上,这应该可以工作。