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

首頁 > 學院 > 開發設計 > 正文

實例解析SQL Server 2000和JDBC的融合

2019-11-18 12:39:14
字體:
來源:轉載
供稿:網友

  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.  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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀集县| 德钦县| 深圳市| 湖口县| 湘潭县| 织金县| 汉川市| 伊吾县| 乌兰浩特市| 临清市| 普安县| 五指山市| 绥江县| 贵阳市| 怀宁县| 大丰市| 历史| 宜丰县| 苏州市| 彭阳县| 泗水县| 桃江县| 贡山| 禹城市| 郯城县| 武汉市| 延川县| 黔西| 平定县| 荃湾区| 礼泉县| 辉县市| 山西省| 柯坪县| 广元市| 胶州市| 宣威市| 东山县| 庄浪县| 曲阳县| 辽阳县|