JSP連接SQL SERVER問(wèn)題總結(jié)
發(fā)表時(shí)間:2024-02-01 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]由于系統(tǒng)需求,最近在開發(fā)過(guò)程中將系統(tǒng)從原來(lái)的MySQL轉(zhuǎn)移到SQL 2000下,其中遇到了諸多問(wèn)題,花費(fèi)了我不少時(shí)間,F(xiàn)在把我的經(jīng)驗(yàn)?zāi)贸鰜?lái)告訴大家,好讓大家少走彎路,節(jié)約時(shí)間。 首先是SQL 2000數(shù)據(jù)庫(kù)的安裝問(wèn)題,在此我主要講些關(guān)于SQL 2000的版本與操作系統(tǒng)的兼容性問(wèn)題:SQL 2000...
由于系統(tǒng)需求,最近在開發(fā)過(guò)程中將系統(tǒng)從原來(lái)的MySQL轉(zhuǎn)移到SQL 2000下,其中遇到了諸多問(wèn)題,花費(fèi)了我不少時(shí)間。現(xiàn)在把我的經(jīng)驗(yàn)?zāi)贸鰜?lái)告訴大家,好讓大家少走彎路,節(jié)約時(shí)間。
首先是SQL 2000數(shù)據(jù)庫(kù)的安裝問(wèn)題,在此我主要講些關(guān)于SQL 2000的版本與操作系統(tǒng)的兼容性問(wèn)題:SQL 2000總共有7個(gè)不同版本,適應(yīng)不同等級(jí)用戶的需求。
我試了一下,在XP系統(tǒng)下只有“個(gè)人開發(fā)版”能正常安裝而不出現(xiàn)錯(cuò)誤,所以大家在安裝時(shí)要注意,具體安裝時(shí)的配置參照相關(guān)說(shuō)明就可以了。
下面說(shuō)明如何連接到SQL 2000數(shù)據(jù)庫(kù),首先當(dāng)然是要下載JDBC驅(qū)動(dòng)程序,最好去微軟官方網(wǎng)站下載,然后將下載到的三個(gè)JAR包放入你的WEB應(yīng)用的WEB-INF/lib/下。接下來(lái)編寫程序進(jìn)行測(cè)試:
/***********************************************
/*
/*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 =test";
//test為數(shù)據(jù)庫(kù)名
user = "sa";
pwd = "sa";
//請(qǐng)更改為你相應(yīng)的用戶和密碼
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();
}
}
按道理講,上邊這段代碼應(yīng)該沒(méi)錯(cuò),可首先我們來(lái)看一下,如果sqlser服務(wù)器沒(méi)有升級(jí)到sp3(在使用jdbc時(shí),如果系統(tǒng)是xp或者2003務(wù)必要把sqlserver 升級(jí)到sp3,往上到處都有下的),我們看看運(yùn)行結(jié)果:
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...
出現(xiàn)上邊錯(cuò)誤的主要原因是默認(rèn)的數(shù)據(jù)庫(kù)服務(wù)器端口 1433沒(méi)有打開,無(wú)法直接連接。如果升級(jí)到sp3則這個(gè)問(wèn)題可以結(jié)決,我們?cè)賮?lái)看看升級(jí)之后,程序運(yùn)行的結(jié)果:
driver is ok
conection is ok
java.sql.SQLException:
[Microsoft][SQLServer 2000 Driver for JDBC]
[SQLServer]對(duì)
象名 ’room’ 無(wú)效。
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...
在這兒,用戶已經(jīng)登陸上去,但是卻不能訪問(wèn)里邊的數(shù)據(jù)表,出現(xiàn)這個(gè)問(wèn)題的原因在于sa用戶為系統(tǒng)用戶,它雖然能夠登陸數(shù)據(jù)庫(kù),但是test數(shù)據(jù)庫(kù)里邊卻沒(méi)有這個(gè)用戶的訪問(wèn)權(quán)限,所以,我們現(xiàn)在為這個(gè)數(shù)據(jù)庫(kù)重新建立一個(gè)用戶share,建立過(guò)程如下:
在test數(shù)據(jù)庫(kù)中選重用戶 ---〉新建用戶 -- 〉名稱選擇(這一步中有兩個(gè)關(guān)鍵點(diǎn):身份驗(yàn)證選sql身份驗(yàn)證,默認(rèn)數(shù)據(jù)庫(kù)選test)-〉建立新教色share ,此時(shí)更改程序,將用戶登陸名和密碼修改一下,重新運(yùn)行程序:
driver is ok
conection is ok
1001
1002
1003
1004
1005
1006
Press any key to continue...
這次順利通過(guò)測(cè)試
其實(shí)這些小問(wèn)題花了我一個(gè)晚上才解決,真是浪費(fèi)時(shí)間,所以寫下來(lái)希望能使遇到類似問(wèn)題的朋友不要重蹈覆轍,在此提醒大家遇到問(wèn)題時(shí)多上網(wǎng)查查,多在論壇里問(wèn)問(wèn),這樣你學(xué)到的會(huì)更多,更節(jié)省時(shí)間,更有效率。
總結(jié):Sqlserve 和JDBC 的融合問(wèn)題,關(guān)鍵涉及到sp3補(bǔ)。ǘ丝陂_放)還有用戶問(wèn)題,解決這兩個(gè)問(wèn)題之后,剩余的便是Sqlserver 操作問(wèn)題了,還有一點(diǎn)在遠(yuǎn)程操作的時(shí)候,要把Sqlserver 組設(shè)置一下,在安全性里邊亦將身份驗(yàn)證更改為Sqlserve 驗(yàn)證即可。