1. Sql server 2000 數據庫自己規定了其數據庫鏈接URL 的通常格式,以下:sql
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]數據庫
之間無空格,其中:服務器
· jdbc:sqlserver://(必需)稱爲子協議,且爲常數。app
· serverName(可選)是要鏈接到的服務器的地址。它能夠是 DNS 或 IP 地址,也能夠是本地計算機地址 localhost 或 127.0.0.1。若是未在鏈接 URL 中指定服務器名稱,則必須在屬性集中指定。sqlserver
· instanceName (可選)是 serverName 上要鏈接到的實例。若是未指定,則會鏈接到默認實例(master)。spa
· portNumber(可選)是 serverName 上要鏈接到的端口。默認值爲 1433。若是使用默認端口,則無需在 URL 中指定端口及其前面的「:」。設計
· property(可選)是一個或多個選項鍊接屬性。有關詳細信息,請參閱設置鏈接屬性。可指定該列表中的任何屬性。屬性只能用分號(「;」)分隔,且不容許重複。server
2. 鏈接實例寫法有:ip
A. 使用用戶名和密碼鏈接到本地計算機上的默認數據庫:ci
jdbc:sqlserver://localhost;user=MyUserName;password=*****;
B. 使用集成身份驗證鏈接到本地計算機上的默認數據庫:
jdbc:sqlserver://localhost;integratedSecurity=true;
C. 鏈接到遠程服務器上的指定數據庫:
jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;
D. 鏈接到遠程服務器上的默認端口:
jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;
E. 經過指定自定義應用程序名稱進行鏈接:
jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
3 .以咱們設計器中的URL寫法爲例詳細說明:
jdbc:microsoft:sqlserver://192.168.100.112:1433;databaseName=test
其中
(1). databaseName=test爲鏈接屬性,屬性值只用「;」分割,咱們只用了一個,若有多個屬性即可寫成:
;databaseName=test;user=MyUserName;password=*****;
所以在test後加不加「;」 鏈接效果同樣,即URL寫成
jdbc:microsoft:sqlserver://192.168.100.112:1433;databaseName=test
或jdbc:microsoft:sqlserver://192.168.100.112:1433;databaseName=test;
都能正確讀取test數據庫
(2).Sql server 2000 數據庫默認的端口爲1433,默認的數據庫實master(應該是安裝時自帶的數據庫)
當URL中databaseName 前誤加了一「_」空格後,以下:
jdbc:microsoft:sqlserver://192.168.100.112:1433; databaseName=test
此時獲取URL時自動判斷空格時URL結束,即得到的實際URL爲:
jdbc:microsoft:sqlserver://192.168.100.112:1433;
而此URL鏈接的爲sql server 2000 默認的數據庫 master,因此讀取的就是數據庫master中的表
結論:
在寫sql server 2000的數據庫URL時,除其自己已有的特殊字符外,要添加其餘特殊字符必須進行轉義,將這些字符包含在大括號中, JDBC 驅動程序將支持對其進行轉義。例如,{;} 將轉義分號。
轉義的值能夠包含特殊字符(特別是「=」、「;」、「[]」和空格),但不能包含大括號。應將必須進行轉義且包含大括號的值添加到屬性集中。
方案:
將咱們所用的數據庫改變爲默認數據庫是一種方法,但通常存在多個可用的數據庫,因此除sqlserver 自己規定的URL格式外,在咱們的程序中最好進行限制,只使用
jdbc:microsoft:sqlserver://ip:port;databaseName=Databasename
一種寫法,且中間不能有空格等