我的開發(fā)環(huán)境為:jdk1.5+jbuilder2006+sql_server2000 sp3
首先,配制環(huán)境,其中包括下載jdbc fro microsft sql_server2000的驅(qū)動程序(在微軟官方網(wǎng)站下的,是sp3版的,這里就不寫具體地址了,網(wǎng)上挺多的,但注意版本,我下的是sp3)。下載后發(fā)現(xiàn)是exe 文件,雙擊安裝。默認安裝目錄:c:/program files/microsoft sql server 2000 driver for jdbc,其中c:/program files/microsoft sql server 2000 driver for jdbc/lib目錄下的三個擴展名為.jar是我們要的驅(qū)動。然后配制環(huán)境變量:
在classpath這個環(huán)境變量里加入以下語句:
c:/program files/microsoft sql server 2000 driver for jdbc/lib/msbase.jar;c:/program files/microsoft sql server 2000 driver for jdbc/lib/mssqlserver.jar;c:/program files/microsoft sql server 2000 driver for jdbc/lib/msutil.jar; |
如果你的機子上正確配制了jdk的環(huán)境變量就應(yīng)該有classpath這個環(huán)境變量,若沒有就新建一個。
其實配環(huán)境變量的目的就是讓系統(tǒng)能找到驅(qū)動程序,如果不配,執(zhí)行下面一段代碼時會產(chǎn)生無法找到驅(qū)動的異常,導致程序無法執(zhí)行。
做完上述事情后,我用ultraedit這個軟件先寫了連接數(shù)據(jù)庫的代碼來試驗,代碼如下:
/* try to connct sql_server database*/import java.sql.*;public class sql_db_test{connection con;statement sta;resultset rs;string sql_driver;string sql_url;string user;string pwd;public sql_db_test(){sql_driver="com.microsoft.jdbc.sqlserver.sqlserverdriver";//驅(qū)動sql_url="jdbc:microsoft:sqlserver://localhost:1433;databasename=manage";//語句一,其中manage是要訪問的數(shù)據(jù)庫名user="xiaolin";//你要訪問的數(shù)據(jù)庫用戶名pwd="123456";//訪問數(shù)據(jù)庫的密碼init();}public void init(){try{class.forname(sql_driver);//加載驅(qū)動system.out.println("driver is ok");con=drivermanager.getconnection(sql_url,user,pwd);system.out.println("connection is ok");sta=con.createstatement();rs=sta.executequery("select * from 制衣表");//executequerywhile(rs.next())system.out.println(rs.getstring("款式"));}catch (exception e){e.printstacktrace();//printstacktrace();}}public static void main(string[] args){new sql_db_test();}} |
將上邊的代碼保存后,在命令提示行里執(zhí)行
javac sql_db_test.java //編譯正常通過
java sql_db_test //產(chǎn)生異常,異常如下
driver is okjava.sql.sqlexception: [microsoft][sqlserver 2000 driver for jdbc]error establishing socket. at com.microsoft.jdbc.base.baseexceptions.createexception(unknown source) at com.microsoft.jdbc.base.baseexceptions.getexception(unknown source) at com.microsoft.jdbc.base.baseexceptions.getexception(unknown source) at com.microsoft.jdbc.sqlserver.tds.tdsconnection.<init>(unknown source) at com.microsoft.jdbc.sqlserver.sqlserverimplconnection.open(unknown source) at com.microsoft.jdbc.base.baseconnection.getnewimplconnection(unknown source) at com.microsoft.jdbc.base.baseconnection.open(unknown source) at com.microsoft.jdbc.base.basedriver.connect(unknown source) at java.sql.drivermanager.getconnection(drivermanager.java:523) at java.sql.drivermanager.getconnection(drivermanager.java:171) at dbtest.init(dbtest.java:32) at dbtest.<init>(dbtest.java:25) at dbtest.main(dbtest.java:46)press any key to continue... |
出現(xiàn)上邊錯誤的主要原因是默認的數(shù)據(jù)庫服務(wù)器端口 1433沒有打開,無法直接連接 。
這時你在命令提示行中輸入命令:netstat –an 來查看有沒有tcp:0.0.0.0:1433,如果沒有那就肯定是因為數(shù)據(jù)庫服務(wù)器端口 1433端口沒開。這時你需要下載sql_serve20000的sp3補丁,下載安裝后會發(fā)現(xiàn)1433端口已經(jīng)打開了,再次執(zhí)行程序,順利執(zhí)行完畢。
上面是在一臺電腦上執(zhí)行的,接下來我將上面的程序放到另一臺電腦(可認為是客戶機,ip:192.168.1.2),用直連線將兩臺電腦連起來,這樣原來的電腦就變成了數(shù)據(jù)庫服務(wù)器(ip:192.168.1.1)。并且把程序中的語句一中的localhost改為192.168.1.1,其他不變。
執(zhí)行后又產(chǎn)生establishing socket異常
后來檢查發(fā)現(xiàn),在網(wǎng)上鄰居中根本看不到對方計算機,然后重新設(shè)置網(wǎng)絡(luò)并打開guest用戶,放開權(quán)限。
使網(wǎng)上鄰居中能出現(xiàn)對方計算機,然后再次執(zhí)行程序,順利執(zhí)行完畢。
接下來,開始加入jbuilder2006了,我在jbuilder中寫了一個連接數(shù)據(jù)庫的類,其他地方做了相關(guān)修改,因為代碼太多,無法在這些出來。這里只把問題寫出來:
沒想到的是,都修改完之后,軟件運行時居然出現(xiàn)下面異常:
java.lang.classnotfoundexception: com.microsoft.jdbc.sqlserver.sqlserverdriver at java.net.urlclassloader$1.run(unknown source) at java.security.accesscontroller.doprivileged(native method) at java.net.urlclassloader.findclass(unknown source) at java.lang.classloader.loadclass(unknown source) at sun.misc.launcher$appclassloader.loadclass(unknown source) at java.lang.classloader.loadclass(unknown source) at java.lang.classloader.loadclassinternal(unknown source) at java.lang.class.forname0(native method) at java.lang.class.forname(unknown source) at sql_db_test.init(sql_db_test.java:21) at sql_db_test.<init>(sql_db_test.java:16) at sql_db_test.main(sql_db_test.java:36) |
這不是說驅(qū)動找不到嗎??為什么??后來在網(wǎng)上一查才知道自己孤陋寡聞,簡直太菜了!!!原來在jbuilder里也得設(shè)置驅(qū)動程序的路徑,設(shè)置方法如下:
一、打開jbuilder,選擇tools-->configure-->libraries。
二、然后在左邊的列表框下選擇new,填入:name:sql,location:user home,然后點擊add,
加入目錄c:/program files/microsoft sql server 2000 jdbc/lib,確定 。
三、project-->prject properties-->paths-->required libraries-->add
加入剛才添加的user home/sql確定
四、enterprise-->enterprise setup-->database drivers-->add,加入user home/sql,
添加之后在列表框中顯示的是sql.config,確定,重新啟動jbuilder
五、tools-->database
pilot-->view-->options-->drivers-->add
填入
driver class:com.microsoft.jdbc.sqlserver.sqlserverdriver simple url:microsoft:sqlserver://localhost:1433;databasename=mybase |
確定之后,tools-->database pilot-->new的driver里選擇
com.microsoft.jdbc.sqlserver.sqlserverdriver |
在url里填入:
microsoft:sqlserver://服務(wù)器ip地址或主機名:1433;databasename=數(shù)據(jù)庫名 |
點擊確定,雙擊或點擊+號輸入sql數(shù)據(jù)庫的用戶名和密碼,就完成了jb與sql的連接!