WEKA連線MySQL,Oracle,SQLServer

light514發表於2013-02-14

1.準備

Windows XP
jdk-1_5_0_14
weka-3-5-7.exe
SQLServer2005
mysql-6.0.0
Oracle10.2.0.1.0
Microsoft SQL Server 2005 JDBC Driver 1.2--->sqljdbc.jar
MySQL Driver for JDBC--->mysql-connector-java-5.1.6-bin.jar
Oracle Driver for JDBC--->ojdbc14.jar


2.雙擊weka-3-5-7.exe安裝weka


3.進入weka安裝目錄

3.1.解壓縮weka.jar

解壓後的目錄結構
[Weka-3-5]
|____...
|____[weka]
     |____[META-INF]
          |____...
     |____[weka]
          |____...
|____...

3.2.新建lib目錄,將資料庫Driver for JDBC(jar包)拷貝進/lib

完成後的目錄結構
[Weka-3-5]
|____...
|____[weka]
     |____[META-INF]
          |____...
     |____[weka]
          |____...
|____[lib]
     |____mysql-connector-java-5.1.6-bin.jar
     |____ojdbc14.jar
     |____sqljdbc.jar
|____...


4.設定環境變數

WEKA_HOME
C:/Program Files/Weka-3-5

ClassPath
.;%WEKA_HOME%/lib/sqljdbc.jar;%WEKA_HOME%/lib/mysql-connector-java-5.1.6-bin.jar;%WEKA_HOME%/lib/ojdbc14.jar;%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/dt.jar

設定完成後,weka就能找到放在/lib中的資料庫jar包了.


5.修改DatabaseUtils.props

進入%WEKA_HOME%/weka/weka/experiment/你會看到:
...
DatabaseUtils.props
DatabaseUtils.props.hsql
DatabaseUtils.props.mssqlserver2005
DatabaseUtils.props.mssqlserver
DatabaseUtils.props.mysql
DatabaseUtils.props.odbc
DatabaseUtils.props.oracle
DatabaseUtils.props.postgresql
...
weka執行時會使用DatabaseUtils.props
其他的如:'DatabaseUtils.props.資料庫名稱'(這些是weka提供的針對不同資料庫提供的模板)
我們先將DatabaseUtils.props隨便改成一個其他的名字,如:DatabaseUtils.props.sample
然後將DatabaseUtils.props.mysql改成DatabaseUtils.props(假設我們需要連線mysql資料庫)
開啟現在的DatabaseUtils.props可以看到以下部分:(#表示註釋)[小弟的註釋]

[版本資訊]
# Database settings for MySQL 3.23.x, 4.x
[小弟連線的是MySQL6所以改成--># Database settings for MySQL 6.x]
#
# url:     http://www.mysql.com/
# jdbc:    http://www.mysql.com/products/connector/j/
# author:  Fracpete (fracpete at waikato dot ac dot nz)
# version: $Revision: 1.3 $
[JDBC版本--># version: $Revision: 5.1 $]

# JDBC driver (comma-separated list)
jdbcDriver=org.gjt.mm.mysql.Driver
[修改為-->jdbcDriver=com.mysql.jdbc.Driver]

# database URL
jdbcURL=jdbc:mysql://server_name:3306/database_name
[這個建議不修改,方便後面進入weka後,通過修改相應的'server_name','datebase_name'來連線相應的mysql資料庫.其實大家在這裡像這樣子jdbcURL=jdbc:mysql://localhost:3306/foodmart寫死了也沒什麼,進入weka後同樣可以修改,但顯得不夠專業不是!~]

# specific data types
# string, getString() = 0;    --> nominal
# boolean, getBoolean() = 1;  --> nominal
# double, getDouble() = 2;    --> numeric
# byte, getByte() = 3;        --> numeric
# short, getByte()= 4;        --> numeric
# int, getInteger() = 5;      --> numeric
# long, getLong() = 6;        --> numeric
# gloat, getFloat() = 7;      --> numeric
# date, getDate() = 8;        --> date
# text, getString() = 9;      --> string
[呵呵,這裡是重點!由於weka僅支援名詞型(nominal),數值型(numeric),字串(string),日期(date).所以我們要將現在資料庫中的資料型別對應到這四種型別上來.]
[將上面的內容改成:
# specific data types
 string, getString() = 0;    --> nominal
 boolean, getBoolean() = 1;  --> nominal
 double, getDouble() = 2;    --> numeric
 byte, getByte() = 3;        --> numeric
 short, getByte()= 4;        --> numeric
 int, getInteger() = 5;      --> numeric
 long, getLong() = 6;        --> numeric
 gloat, getFloat() = 7;      --> numeric
 date, getDate() = 8;        --> date
 text, getString() = 9;      --> string
TINYINT=3
SMALLINT=4
#SHORT=4
SHORT=5
INTEGER=5
INT=5
BIGINT=6
LONG=6
REAL=7
NUMERIC=2
DECIMAL=2
FLOAT=2
DOUBLE=2
CHAR=0
TEXT=0
VARCHAR=0
LONGVARCHAR=9
BINARY=0
VARBINARY=0
LONGVARBINARY=9
BIT=1
BLOB=9
DATE=8
TIME=8
DATETIME=8
TIMESTAMP=8
這裡參考了一些網友的帖子,自己google了一些,這裡MySQL常用的資料型別都設定好了,再也不用擔心weka不識別對應的資料型別了^-^
大家注意,上面有部分'#'要去掉哦!
在附錄中會提供小弟為大家精心準備的DatabaseUtils.props檔案:
DatabaseUtils.props.mssqlserver2005_ok
DatabaseUtils.props.mysql6_ok
DatabaseUtils.props.oracle10g_ok
檔名大家隨意,使用的時候記得改成DatabaseUtils.props就好]

# other options
CREATE_DOUBLE=DOUBLE
CREATE_STRING=TEXT
CREATE_INT=INT
checkUpperCaseNames=false
checkLowerCaseNames=false
checkForTable=true
[其他設定,暫時不用修改]


6.製作weka.jar並替換原來的jar

因為weka軟體執行時需要讀取weka.jar,所以你修改之後要重新打包jar檔案替換原來的jar才可以執行weka軟體成功連線資料庫.

6.1.從命令列進入%WEKA_HOME%/weka
6.2.執行jar cvf weka.jar weka/*.*

6.3.進入%WEKA_HOME%/weka會發現打包好了的weka.jar(沒有的請重新整理一下)

6.4.將%WEKA_HOME%/weka下的weka.jar複製到%WEKA_HOME%(建議將原來的weka.jar改名成weka.jar.sample備用,大家今後如果針對不同資料庫建立了多個weka.jar不妨將其改名成-->'weka.jar.資料庫名',用的時候將字尾去掉就行,體力活我們做一次就夠了!~)


7.執行weka

奇怪的問題:執行-->Weka 3.5(不帶控制檯)進入weka連不上資料庫(mysql,oracle,sqlserver都不行),說找不到合適的JDBC DRIVER.但執行-->Weka 3.5 (with console)則全部正常.期待達人解答!~

不理它,能用就行,畢竟現在還附送個'控制檯'!~

7.1.執行-->Weka 3.5 (with console)

7.2.選擇Applications--->Explorer

7.3.選擇Open DB...

7.4.選擇User...
根據自己的情況修改Database URL,Username,Password.

7.5.選擇Connect
注意視窗下方的Info裡的資訊!
... = true   --->恭喜你,連線成功!~
... = false   --->失敗!~別灰心,向上一步步地檢查,你離true不遠了!~

7.6.連線成功後游標會自動選擇Query欄,等著各位兄臺來輸入sql語句.小弟輸入一個超簡單的,然後選擇Execute執行sql語句.

7.7.執行成功後在Result欄中會有資料顯示.

7.8.選擇OK,呵呵!~weka已經捕獲了相關資料,並顯示相關資訊,接下來各位愛怎麼玩,就怎麼玩!~

7.9.如果我不寫sql語句,在連線成功後直接選擇OK,會怎麼樣?嘿嘿,weka會說連線資料庫有問題,沒有合適的驅動.什麼也不顯示.所以還是告訴它我們需要哪些資料,不然接下來就沒得玩了啦^_^


8.參考帖子

C6H5NO2
WEKA連線資料庫指南(mysql版)
http://bbs2.wekacn.org/viewtopic.php?f=2&t=216&sid=13cdd0c42079a4b719d5d54b83855780

kongter
weka連線mysql資料庫(windows xp版),無需解壓縮,無需配置DatabaseUtils.props檔案
http://bbs2.wekacn.org/viewtopic.php?f=2&t=293&sid=13cdd0c42079a4b719d5d54b83855780

ps:小弟剛開始就是使用上面的方法(由於需要對%WEKA_HOME%/RunWeka.bat進行修改,一味的追求連上資料庫,破壞了源程式的完整性.就算配好了,更換資料庫時便需要再度對其修改.因此不推薦大家使用),運氣不好,沒整出來!~

資料探勘青年(DMman)
Weka如何連線資料庫
http://blogger.org.cn/blog/more.asp?name=DMman&id=24991

ps:呵呵,這是比較正統的方法,沒有這篇帖子就沒有今天小弟的作品!~


9.附錄

這裡給大家提供較為完整的配置方案,基本上夠用.其中specific data types部分參照了各個資料庫的資料型別說明,不常用的資料型別沒有列出.(當然,有一部分比較bt的資料型別實在是不知道讓weka如何對應,如果哪位高手有更全面的設定,歡迎提供!~)

9.1.DatabaseUtils.props.mssqlserver2005_ok

# Database settings for Microsoft SQL Server 2005 Express Edition
#
# url:     http://www.microsoft.com/
# jdbc:    http://msdn2.microsoft.com/en-us/data/aa937724.aspx
# author:  Fracpete (fracpete at waikato dot ac dot nz)
# version: $Revision: 1.2 $

# JDBC driver (comma-separated list)
jdbcDriver=com.microsoft.sqlserver.jdbc.SQLServerDriver

# database URL
jdbcURL=jdbc:sqlserver://server_name;databaseName=database_name

# specific data types
 string, getString() = 0;    --> nominal
 boolean, getBoolean() = 1;  --> nominal
 double, getDouble() = 2;    --> numeric
 byte, getByte() = 3;        --> numeric
 short, getByte()= 4;        --> numeric
 int, getInteger() = 5;      --> numeric
 long, getLong() = 6;        --> numeric
 gloat, getFloat() = 7;      --> numeric
 date, getDate() = 8;        --> date
 text, getString() = 9;      --> string
bit=1
tinyint=3
smallint=4
int=5
bigint=6
smallmoney=2
money=2
numeric=2
decimal=2
float=2
real=2
smalldatetime=8
datetime=8
timestamp=8
char=0
text=0
varchar=0
nchar=0
ntext=0
nvarchar=0
binary=0
varbinary=0
image=0
uniqueidentifier=9
rowversion=9

# other options
CREATE_DOUBLE=DOUBLE PRECISION
CREATE_STRING=VARCHAR(8000)
CREATE_INT=INT
checkUpperCaseNames=false
checkLowerCaseNames=false
checkForTable=true

9.2.DatabaseUtils.props.mysql6_ok

# Database settings for MySQL 6.x
#
# url:     http://www.mysql.com/
# jdbc:    http://www.mysql.com/products/connector/j/
# author:  Fracpete (fracpete at waikato dot ac dot nz)
# version: $Revision: 5.1 $

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

# database URL
jdbcURL=jdbc:mysql://server_name:3306/database_name

# specific data types
 string, getString() = 0;    --> nominal
 boolean, getBoolean() = 1;  --> nominal
 double, getDouble() = 2;    --> numeric
 byte, getByte() = 3;        --> numeric
 short, getByte()= 4;        --> numeric
 int, getInteger() = 5;      --> numeric
 long, getLong() = 6;        --> numeric
 gloat, getFloat() = 7;      --> numeric
 date, getDate() = 8;        --> date
 text, getString() = 9;      --> string
TINYINT=3
SMALLINT=4
#SHORT=4
SHORT=5
INTEGER=5
INT=5
BIGINT=6
LONG=6
REAL=7
NUMERIC=2
DECIMAL=2
FLOAT=2
DOUBLE=2
CHAR=0
TEXT=0
VARCHAR=0
LONGVARCHAR=9
BINARY=0
VARBINARY=0
LONGVARBINARY=9
BIT=1
BLOB=9
DATE=8
TIME=8
DATETIME=8
TIMESTAMP=8

# other options
CREATE_DOUBLE=DOUBLE
CREATE_STRING=TEXT
CREATE_INT=INT
checkUpperCaseNames=false
checkLowerCaseNames=false
checkForTable=true

9.3.DatabaseUtils.props.oracle10g_ok

# Database settings for Oracle 10g Express Edition
#
# url:     http://www.oracle.com/
# jdbc:    http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/
# author:  Fracpete (fracpete at waikato dot ac dot nz)
# version: $Revision: 1.3 $

# JDBC driver (comma-separated list)
jdbcDriver=oracle.jdbc.driver.OracleDriver

# database URL
jdbcURL=jdbc:oracle:thin:@server_name:1521:database_name

# specific data types
 string, getString() = 0;    --> nominal
 boolean, getBoolean() = 1;  --> nominal
 double, getDouble() = 2;    --> numeric
 byte, getByte() = 3;        --> numeric
 short, getByte()= 4;        --> numeric
 int, getInteger() = 5;      --> numeric
 long, getLong() = 6;        --> numeric
 gloat, getFloat() = 7;      --> numeric
 date, getDate() = 8;        --> date
 text, getString() = 9;      --> string
CHAR=0
NCHAR=0
VARCHAR2=0
NVARCHAR2=0
RAW=9
NUMBER=2
BINARY_FLOAT=2
DATE=8
TIMESTAMP=8
ROWID=9
DOUBLE_PRECISION=2

# other options
CREATE_INT=INTEGER
CREATE_STRING=VARCHAR2(4000)
CREATE_DOUBLE=NUMBER
checkUpperCaseNames=true
checkForTable=true

轉自 http://blog.csdn.net/striker/article/details/3991169

相關文章