国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

sqlserver 2000h 和 jdbc 的融合問題

2024-07-21 02:14:12
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • sql server 2000 是當今網絡編程中使用的比較多的一個數據庫系統,而java則是流行的網絡編程語言,在網絡編程中涉及的比較多也比較重要的就是數據庫問題,java自身提供了對各類主流數據庫系統的支持,通過提供java.sql 庫,提供了一個統一的接口,使得可以在java環境下不必對程序作大規模的修改,只要更改相應的驅動程序,即可實現對各類數據庫的操作,從而提高軟件的生存周期和降低軟件的開發成本和維護費用,在這種情況下sql server 2000 和java 的融合問題就顯得比較重要了,本文簡要地闡述一下sql server 2000 和jdk的融合問題。


    系統需求:
         數據庫:sql server 2000 sp3
         驅動程序:sql server driver for jdbc 
         java版本:jdk1.2以上

    1:我們首先使用jdbc-odbc橋來實現數據庫的連接,這個相對簡單
       首先使用sql server 企業管理其建立一個數據庫test,并建立一個簡單的表 first_table
       建立odbc數據源 ,各步驟采用默認操作即可
       
       編寫一個簡單的測試程序,該程序主要實現數據庫的連接,以及一個簡單的sql操作 ,代碼如下:
       /***********************************************
     /*
     /*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 = "sun.jdbc.odbc.jdbcodbcdriver";
          url    = "jdbc:odbc:store_manager";
          user   = "share";
          pwd    = "share";
          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();
      }
     }


    運行結果如下:

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


    順利通過測試


    2,我們這次不通過odbc橋來操作數據庫,我們采用sql server driver 來實現對sqlserver數據庫的操作, 這將是我們這篇文章的重點,因為jdbc-odbc橋是一種常見的操作windows系統數據庫的常用方法,但它存在的缺點很多,所以現在很多開發者都側重于使用sqlserver driver來操作,在這里我們通過一步步的調試,來加深讀者對這種連接的理解

       在通常的理解下,只要我們裝了sqlserver driver for jdbc 我們便可進行數據庫編程,事實則不然,首先我們看下邊的代碼:
    /***********************************************
     /*
     /*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 =storemanager";
          user   = "sa";
          pwd    = "potsmart10";
          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();
      }
     }


    這段代碼跟上變得代碼是一樣的,差別在于驅動,還有url,這是在使用sqlserver driver for jdbc 中遇到的困惑

     按道理講,上邊這段代碼應該沒錯,可首先我們來看一下,如果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用戶為系統用戶
    它雖然能夠登陸數據庫,但是storemanager數據庫里邊卻沒有這個用戶的訪問權限,所以,我們現在為這個數據庫重新建立一個用戶
    share ,建立過程如下:在storemanager數據庫中選重用戶 ---〉新建用戶 -- 〉名稱選擇(這一步中有兩個關鍵點 1:身份驗證選sql身份驗證,默認數據庫選storemanager)-〉建立新教色share ,此時更改程序,將用戶登陸名和密碼修改一下,重新運行程序

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

    這次順利通過測試



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

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 新绛县| 孟村| 衡水市| 元氏县| 余姚市| 茌平县| 连城县| 黑河市| 威海市| 黄平县| 鞍山市| 任丘市| 阳城县| 永嘉县| 贡山| 大悟县| 镇巴县| 夏津县| 阿拉尔市| 贡觉县| 平和县| 阜康市| 崇阳县| 泰州市| 吉安市| 东光县| 通山县| 洪江市| 施秉县| 榆林市| 盐亭县| 古蔺县| 乳山市| 五台县| 米泉市| 乐清市| 大田县| 梁平县| 汤原县| 双鸭山市| 武功县|