top
Loading...
JSP中連接SQL2000數據庫的問題總結

由于系統需求,最近在開發過程中將系統從原來的MySQL轉移到SQL 2000下,其中遇到了諸多問題,花費了我不少時間。現在把我的經驗拿出來告訴大家,好讓大家少走彎路,節約時間。

首先是SQL 2000數據庫的安裝問題,在此我主要講些關于SQL 2000的版本與操作系統的兼容性問題:SQL 2000總共有7個不同版本,適應不同等級用戶的需求。

我試了一下,在XP系統下只有“個人開發版”能正常安裝而不出現錯誤,所以大家在安裝時要注意,具體安裝時的配置參照相關說明就可以了。

下面說明如何連接到SQL 2000數據庫,首先當然是要下載JDBC驅動程序,最好去微軟官方網站下載,然后將下載到的三個JAR包放入你的WEB應用的WEB-INF/lib/下。接下來編寫程序進行測試:

/*********************************************** /* /*DBTest.java /* /******************************************* */  import java.sql.*;  public class DBTest {    Connection con;  Statement  sta;  ResultSet  rs;    String driver;  String url;  String user;  String pwd;  public DBTest()  {      driver = "com.microsoft.jdbc.  sqlserver.SQLServerDriver";;      url    = "jdbc:microsoft:sqlserver:  //localhost:1433;DatabaseName =test";      //test為數據庫名      user   = "sa";      pwd    = "sa";      //請更改為你相應的用戶和密碼      init();  }  public void init()  {   try{    Class.forName(driver);    System.out.println("driver is ok");    con = DriverManager.getConnection(url,user,pwd);    System.out.println("conection is ok");       sta = con.createStatement();       rs  = sta.executeQuery   ("select * from room");       while(rs.next())        System.out.println(rs.getInt("roomNum"));    }catch(Exception e)    {     e.printStackTrace();    }  }    public static void main(String args[])  //自己替換[]  {   new DBTest();  } }

按道理講,上邊這段代碼應該沒錯,可首先我們來看一下,如果sqlser服務器沒有升級到sp3(在使用jdbc時,如果系統是xp或者2003務必要把sqlserver 升級到sp3,往上到處都有下的),我們看看運行結果:

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.(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.(DbTest.java:25)        at DbTest.main(DbTest.java:46)Press any key to continue...

出現上邊錯誤的主要原因是默認的數據庫服務器端口 1433沒有打開,無法直接連接。如果升級到sp3則這個問題可以結決,我們再來看看升級之后,程序運行的結果:

driver is okconection is okjava.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]對象名 'room' 無效。        at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)        at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)        at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)        at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)        at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)        at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)        at DbTest.init(DbTest.java:35)        at DbTest.(DbTest.java:25)        at DbTest.main(DbTest.java:46)Press any key to continue...

在這兒,用戶已經登陸上去,但是卻不能訪問里邊的數據表,出現這個問題的原因在于sa用戶為系統用戶,它雖然能夠登陸數據庫,但是test數據庫里邊卻沒有這個用戶的訪問權限,所以,我們現在為這個數據庫重新建立一個用戶share,建立過程如下:

在test數據庫中選重用戶 ---〉新建用戶 -- 〉名稱選擇(這一步中有兩個關鍵點:身份驗證選sql身份驗證,默認數據庫選test)-〉建立新教色share ,此時更改程序,將用戶登陸名和密碼修改一下,重新運行程序:

driver is okconection is ok100110021003100410051006Press any key to continue...

這次順利通過測試

其實這些小問題花了我一個晚上才解決,真是浪費時間,所以寫下來希望能使遇到類似問題的朋友不要重蹈覆轍,在此提醒大家遇到問題時多上網查查,多在論壇里問問,這樣你學到的會更多,更節省時間,更有效率。

總結:Sqlserve 和JDBC 的融合問題,關鍵涉及到sp3補丁(端口開放)還有用戶問題,解決這兩個問題之后,剩余的便是Sqlserver 操作問題了,還有一點在遠程操作的時候,要把Sqlserver 組設置一下,在安全性里邊亦將身份驗證更改為Sqlserve 驗證即可。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗