[轉摘] JSP串連SQL SERVER問題總結

來源:互聯網
上載者:User
由於系統需求,最近在開發過程中將系統從原來的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 ok
java.sql.SQLException: [Microsoft]
[SQLServer 2000 Driver for JDBC]
Error establis
hing 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 Sou
rce)
        at com.microsoft.jdbc.base.
  BaseConnection.getNewImplConnection(Unknown S
ource)
        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...

出現上邊錯誤的主要原因是預設的資料庫伺服器連接埠 1433沒有開啟,無法直接連接。如果升級到sp3則這個問題可以結決,我們再來看看升級之後,程式啟動並執行結果: 

driver is ok
conection is ok
java.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 Sour
ce)
        at com.microsoft.jdbc.sqlserver.
  SQLServerImplStatement.getNextResultType
(Unknown Source)
        at com.microsoft.jdbc.base.
  BaseStatement.commonTransitionToState
  (Unknown
 Source)
        at com.microsoft.jdbc.base.
  BaseStatement.postImplExecu
te(Unknown Source)

        at com.microsoft.jdbc.base.
  BaseStatement.commonExecute(Unknown Source)
        at com.microsoft.jdbc.base.
  BaseStatement.executeQueryInternal
  (Unknown So
urce)
        at com.microsoft.jdbc.base.
  BaseStatement.executeQuery(Unknown Source)
        at DbTest.init(DbTest.java:35)
        at DbTest.<init>(DbTest.java:25)
        at DbTest.main(DbTest.java:46)
Press any key to continue...

在這兒,使用者已經登陸上去,但是卻不能訪問裡邊的資料表,出現這個問題的原因在於sa使用者為系統使用者,它雖然能夠登陸資料庫,但是test資料庫裡邊卻沒有這個使用者的存取權限,所以,我們現在為這個資料庫重建立立一個使用者share,建立過程如下: 

在test資料庫中選重使用者 ---〉建立使用者 -- 〉名稱選擇(這一步中有兩個關鍵點:身分識別驗證選sql身分識別驗證,預設資料庫選test)-〉建立新教色share ,此時更改程式,將使用者登陸名和密碼修改一下,重新運行程式: 

driver is ok
conection is ok
1001
1002
1003
1004
1005
1006
Press any key to continue...

這次順利通過測試 

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

總結:Sqlserve 和JDBC 的融合問題,關鍵涉及到sp3補丁(連接埠開放)還有使用者問題,解決這兩個問題之後,剩餘的便是Sqlserver 操作問題了,還有一點在遠程操作的時候,要把Sqlserver 組設定一下,在安全性裡邊亦將身分識別驗證更改為Sqlserve 驗證即可。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.