weka 在 eclipse 直接连接Oracle 取数据,需要修改weka包中的配置文件。
在使用weka包连接数据库前,我们先研究 eclipse 如何连接oracle取数据
1,eclipse 连接oracle取数据
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) throws Exception{
//1.准备参数
String ip = "125.210.207.51";
String sid = "wasubi@b64>>......"; // 这里我隐藏了sid,读者可以根据自己连接数据的sid替换掉
String port = "1521";
String dbUser = "yangt";
String dbPassword = "wasu1234";
String driver = "oracle.jdbc.driver.OracleDriver";
//2.构造驱动实例
Class.forName(driver);
//3.创建连接
//连接字符串是固定的形式,oracle的形式:
String url = "jdbc:oracle:thin:@" + ip + ":" + port + ":" + sid; // 注意这里url的格式,weka将使用这种格式
System.out.println(url);
Connection conn= DriverManager.getConnection(url, dbUser, dbPassword);
//4.执行SQL语句
String sql = "select * from MONTH_KAIJI1 t where rownum<10";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);//执行sql语句
while(rs.next()){
String id = rs.getString(1);
int pwd = rs.getInt(2);
System.out.println(id+"-"+pwd);
}
rs.close();
stmt.close();
conn.close();
}
}
2,在eclipse 中使用weka包连接oracle数据取数,首先修改配置文件:
2.1,获得 String url = "jdbc:oracle:thin:@" + ip + ":" + port + ":" + sid;
即:jdbc:oracle:thin:@125.210.207.51:1521:wasubi@b64>>......
2.2,在weka包中的--weka--experiment--databaseUtils.props.oracle文件中,jdbcURL=jdbc:oracle:thin:@server_name:1521:XE 中改为:
jdbcURL=jdbc:oracle:thin:@125.210.207.51:1521:wasubi@b64>>............
2.3,数据类型前的#全部去掉
# string, getString() = 0; --> nominal
改为:
string, getString() = 0; --> nominal
2.4,databaseUtils.props.oracle文件改名为databaseUtils.props
2.5,在eclipse 使用weka包连接oracle,代码中顺带将数据库中的数据存在了Arff格式的文件
import java.io.File;
import weka.core.Instances;
import weka.core.converters.ArffSaver;
import weka.experiment.InstanceQuery;
public class Weka2Oracle_t {
/*
* 数据库读入
*/
public static void main(String[] args) throws Exception{
InstanceQuery q=new InstanceQuery();
q.setUsername("yangt");
q.setPassword("wasu1234");
q.setSparseData(true);
q.setQuery("select * from MONTH_KAIJI1 t where rownum<10");
Instances d=q.retrieveInstances();
System.out.println(d);
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(d);
saver.setFile(new File("data\\testcsv1.arff"));
saver.writeBatch();
}
}