捌玖网络工作室's Archiver

admin 发表于 2007-12-5 17:47

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
Pr/s~u6C
W$Rfz'er@vU? 首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。
/\ A o#v4s ]*n7p)V+K
我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。
{1Tn!b#tY(k J` yr5_*^'w2O2ed
下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: Yo L T0wz(O"?

"o4F.so(Z\ [code]/*********************************************** P$`]t8n$Y l8{
/* s"h,h0Z;]X,c9iM
/*dbtest.java
"TL7IhPJf?7vK /* H4e/Fl^9RKJ
/******************************************* */ !gmx.k%f6E%~z-x5O

,F#h(HE? i6rL a import java.sql.*; 8d{Ou _6OB

3w;h'Z5F1Z public class dbtest
r-d IJrI b"N_ {
wg8y-MD n5pY3m
0E X8C^r connection con; j {)p*vAy9W
statement sta; .FO-kK6a3[l9Eq"Q.q
resultset rs;
Ha#K nAf"_6J
H B H8J XX!k3v!_-cm string driver;
CNF ~(H g#Z2H%L string url;
*F CB+qRy EF string user;
%T?%h)?X$G string pwd; iH~-f g(`a1s
public dbtest()
V3F5UIC,t}#FjC {
6B/m.K-wLY driver = "com.microsoft.jdbc. 9{nqj3B3`z}
sqlserver.sqlserverdriver";;
f|Kj4}$f url = "jdbc:microsoft:sqlserver: z1n!X1V*n_to
//localhost:1433;databasename =test"; *f#X|,R*cM1B [
//test为数据库名
y5Ma&B%~ user = "sa"; -F&?!x#D#NH'i
pwd = "sa";
~k*r {kz!eY9~ //请更改为你相应的用户和密码 p K!] MO n6dPh
init();
e)LmoJl }
h5S c*J+ez[ public void init() oB)Rn#g[Y'v
{
V;D5wN0C~ try{ VLJ2D,F Q:HOvQ
class.forname(driver);
nR5CN;c system.out.println("driver is ok"); ~*s'z,E` I;j A
con = drivermanager.
3]D%~P(?v getconnection(url,user,pwd); ik&M4Ko
system.out.println("conection is ok"); eISZ/{M)a6c
sta = con.createstatement();
iY&g0b Y'I9B3wo C rs = sta.executequery k-?'B Pab%H
("select * from room"); 7?$\:y8_m i0Trp
while(rs.next())
%R^7FARiI system.out.println o+|*R+Zbv t^I
(rs.getint("roomnum")); %P&C:hb S%Y
}catch(exception e) &gC!]e$P)^3y[[xK
{
d;_"f:~0I-d\?*n e.printstacktrace(); $n&w+CKn|2s
}
*?2d*[ rEKK5Sb }
Mur^,`3~b ^ :U a2V3^Ok.C#}
public static void main(string args[])
M`8w2L9IR //自己替换[]
o$ba/e OG { !U Dr^b!WR `#Y0S
new dbtest();
.A d+C#~@0HU$bFH\ }
#u}3w3ILH*eq } [/code]-B,t(`8X|@Z
)vFTQSG*^
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok
j\ b-^*jO3Y java.sql.sqlexception: [microsoft]
.kr#VX:] [sqlserver 2000 driver for jdbc] k8P)laE+a
error establis $P;D5G+w xT%]}
hing socket.
om-~5s"`kr at com.microsoft.jdbc.base. t^]-A%f;KD'SXJW
baseexceptions.createexception(unknown source
Z*r ` DM,J )
5EN V0_7L J3X at com.microsoft.jdbc.base.
iIT Y$YJ{_7m(y baseexceptions.getexception(unknown source) u6[X v-pM _
at com.microsoft.jdbc.base. E D g!R9Y7A
baseexceptions.getexception(unknown source) OUax-xa{z'i
at com.microsoft.jdbc.sqlserver.tds.
.\.U9E V6Pv tdsconnection.(unknown source) V!NY;A p

({)w[lE}2Vx at com.microsoft.jdbc.sqlserver.
4lv6Yb?9z,g3} sqlserverimplconnection.open(unknown sou
]*u$~*RIHebn4V rce)
Q.E kD'ehyYA:f at com.microsoft.jdbc.base.
f,V @-fg7q \~l baseconnection.getnewimplconnection(unknown s
W"K8In&|,v ource)
W"jb4fR I$vW at com.microsoft.jdbc.base.
Du&|aKq baseconnection.open(unknown source)
5l/z#e2I-~`+Q1K at com.microsoft.jdbc.base.
wv QRh%V3FX h+C/C basedriver.connect(unknown source)
gw)uO$P8s2a*y)z/C}b at java.sql.drivermanager.
x w\9|([!K a| getconnection(drivermanager.java:523) Q'o'u*FN
at java.sql.drivermanager.
*L\/W7O+b&p |d!W getconnection(drivermanager.java:171)
uJ E1trh r at dbtest.init(dbtest.java:32)
}J jN4V7l at dbtest.(dbtest.java:25)
~N`hEN'j#j QmB at dbtest.main(dbtest.java:46) X+v9C DE(c
press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok
2p9W6kY/Cq@j conection is ok e8y2z2wM*x
java.sql.sqlexception:
3K4Ga'hu:Mk~ [microsoft][sqlserver 2000 driver for jdbc] vx$j'l }nKz_;w
[sqlserver]对
,k u f6s5l ^;e 象名 ’room’ 无效。
'K.sr `.z.u at com.microsoft.jdbc.base. *E}1UKu#_Tv
baseexceptions.createexception(unknown source
uhdah"{"M}D*I\:ap ~ #{6f~_\l+MCM
)
T`;\({sCPlI at com.microsoft.jdbc.base.
C _Y[Frs baseexceptions.getexception(unknown source)
t8SYk'ur,n9x\H at com.microsoft.jdbc.sqlserver.tds. M z;Mv!a:kV^4EH
tdsrequest.processerrortoken(unknown M }8O+m r5W P f1L$V j
source) qiv8xA
at com.microsoft.jdbc.sqlserver.tds.
o6?d a"YF tdsrequest.processreplytoken(unknown c xfo9Bg*K6f
source) fZ ^
at com.microsoft.jdbc.sqlserver.tds.
^ V7D!rN]A$lN tdsexecuterequest.processreplytoken( "c r+B#ucQI$]
unknown source) &L sN Fn8J:g
at com.microsoft.jdbc.sqlserver.tds. 1\6Xr`l3G"b/s
tdsrequest.processreply(unknown sour
-GJc9V T h ce) 8n$BR!Jy$bG_;Eh
at com.microsoft.jdbc.sqlserver. 5dZ+J W u-~v F
sqlserverimplstatement.getnextresulttype SIRq-z
(unknown source) !@ D7e.r:w
at com.microsoft.jdbc.base. ,D0{S)NtSSk8Wy
basestatement.commontransitiontostate \;~;TK"g [d4BF
(unknown T7fKo v m,Iu#^
source) 8|w.H k.R A |H
at com.microsoft.jdbc.base. $Or0bN qU;O
basestatement.postimplexecu
8y%\.Yju"FF2h `"X"z te(unknown source) ,M1PU6lr5B].OES

(}I:SW{ at com.microsoft.jdbc.base.
d?6Q&h2F9{4|I,r'D basestatement.commonexecute(unknown source)
i~ B0^,D5RkF,e"Yi at com.microsoft.jdbc.base.
0MX0WP(_1WO basestatement.executequeryinternal
R.u"B XO (unknown so 2u5Z\3IMj
urce)
.zs9U}B-z J;f at com.microsoft.jdbc.base.
b Q8vna IE.aC basestatement.executequery(unknown source)
UVPR|1hlk+K at dbtest.init(dbtest.java:35)
+lG qR-v%A-~TJ at dbtest.(dbtest.java:25)
5^$F.b3m`/`d2` b at dbtest.main(dbtest.java:46) {g1T~9L)?J
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  
(o y5Z'M_V4tMM
w+MG;[/HD7x 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok
^)z4Aq5D;Z:@:j conection is ok $M%e{5f:x G.v2n%dd:o
1001 $~G9J$uv/i
1002
u^-i6W/G 1003
xW%`s*KO 1004
0p H$iLW$F 1005 |v5c[Cd\.l\hG
1006 G I/IBw*n`N
press any key to continue... [/code]这次顺利通过测试  G U Q%bD[{
Gh O4b9Bx
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  "ay g8~%_Q }$igc?Y

Jh,N FGs [b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.