1. Sqlserver2000 數(shù)據(jù)庫本身規(guī)定了其數(shù)據(jù)庫連接URL 的一般格式,如下:
jdbc:sqlserver://[serverName["instanceName][:portNumber]][;property=value[;property=value]] 之間無空格,其中:
· jdbc:sqlserver://(必需)稱為子協(xié)議,且為常數(shù)。
· serverName(可選)是要連接到的服務(wù)器的地址。它可以是 DNS 或 IP 地址,也可以是本地計(jì)算機(jī)地址 localhost 或 127.0.0.1。如果未在連接 URL 中指定服務(wù)器名稱,則必須在屬性集中指定。
· instanceName(可選)是 serverName 上要連接到的實(shí)例。如果未指定,則會(huì)連接到默認(rèn)實(shí)例(master)。
· portNumber(可選)是 serverName 上要連接到的端口。默認(rèn)值為 1433。如果使用默認(rèn)端口,則無需在 URL 中指定端口及其前面的“:”。
· property(可選)是一個(gè)或多個(gè)選項(xiàng)連接屬性。有關(guān)詳細(xì)信息,請(qǐng)參閱設(shè)置連接屬性。可指定該列表中的任何屬性。屬性只能用分號(hào)(“;”)分隔,且不允許重復(fù)。
2. 連接實(shí)例寫法有:
A. 使用用戶名和密碼連接到本地計(jì)算機(jī)上的默認(rèn)數(shù)據(jù)庫: jdbc:sqlserver://localhost;user=MyUserName;password=*****;
B. 使用集成身份驗(yàn)證連接到本地計(jì)算機(jī)上的默認(rèn)數(shù)據(jù)庫: jdbc:sqlserver://localhost;integratedSecurity=true;
C. 連接到遠(yuǎn)程服務(wù)器上的指定數(shù)據(jù)庫: jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;
D. 連接到遠(yuǎn)程服務(wù)器上的默認(rèn)端口: jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;
E. 通過指定自定義應(yīng)用程序名稱進(jìn)行連接: jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=MyApp;
3 .以我們?cè)O(shè)計(jì)器中的URL寫法為例詳細(xì)說明: jdbc:microsoft:sqlserver://192.168.100.112:1433;databaseName=test 其中
(1). databaseName=test 為連接屬性,屬性值只用“;”分割,我們只用了一個(gè),如有多個(gè)屬性便可寫成:
;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數(shù)據(jù)庫
(2). Sql server 2000 數(shù)據(jù)庫默認(rèn)的端口為1433,默認(rèn)的數(shù)據(jù)庫實(shí)master(應(yīng)該是安裝時(shí)自帶的數(shù)據(jù)庫)
當(dāng)URL中databaseName 前誤加了一“_”空格后,如下:
jdbc:microsoft:sqlserver://192.168.100.112:1433; databaseName=test
此時(shí)獲取URL時(shí)自動(dòng)判斷空格時(shí)URL結(jié)束,即獲得的實(shí)際URL為:
jdbc:microsoft:sqlserver://192.168.100.112:1433;
而此URL連接的為sql server 2000 默認(rèn)的數(shù)據(jù)庫 master, 所以讀取的就是數(shù)據(jù)庫master中的表。
結(jié)論:
在寫sql server 2000的數(shù)據(jù)庫URL時(shí),除其本身已有的特殊字符外,要添加其他特殊字符必須進(jìn)行轉(zhuǎn)義,將這些字符包含在大括號(hào)中, JDBC 驅(qū)動(dòng)程序?qū)⒅С謱?duì)其進(jìn)行轉(zhuǎn)義。例如,{;} 將轉(zhuǎn)義分號(hào)。
轉(zhuǎn)義的值可以包含特殊字符(特別是“=”、“;”、“[]”和空格),但不能包含大括號(hào)。應(yīng)將必須進(jìn)行轉(zhuǎn)義且包含大括號(hào)的值添加到屬性集中。
方案:
將我們所用的數(shù)據(jù)庫改變?yōu)槟J(rèn)數(shù)據(jù)庫是一種方法,但一般存在多個(gè)可用的數(shù)據(jù)庫,所以除sqlserver 本身規(guī)定的URL格式外,在我們的程序中最好進(jìn)行限制,只使用 jdbc:microsoft:sqlserver://ip:port;databaseName=Databasename 一種寫法,且中間不能有空格等。