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

首頁 > 數據庫 > SQL Server > 正文

SQL Server2000+JDBC常見問題及解決

2024-08-31 00:50:43
字體:
來源:轉載
供稿:網友

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

  在通常的理解下,只要我們裝了sqlserver driver for jdbc 我們便可進行數據庫編程,事實則不然,首先我們看下邊的代碼:

/***********************************************
/*
/*DbTest.java
/*http://m.survivalescaperooms.com
/******************************************* */

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 中遇到的困惑。按道理講,上邊這段代碼應該沒錯,可首先我們來看一下,如果SQL Server服務器沒有升級到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...

  這次順利通過測試

  總結:

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辛集市| 綦江县| 福清市| 永胜县| 磴口县| 沙河市| 云浮市| 朝阳县| 富源县| 固安县| 泰兴市| 宾阳县| 福鼎市| 察雅县| 安康市| 营山县| 安化县| 建湖县| 迁西县| 施甸县| 临沂市| 容城县| 武夷山市| 张掖市| 永兴县| 历史| 镇巴县| 张家港市| 嘉祥县| 丹凤县| 黔西| 虹口区| 民权县| 梁平县| 武陟县| 阳东县| 长沙县| 塘沽区| 康马县| 武城县| 剑阁县|