捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。 6b9nL-{Ekux
5]kB }9n0^j,nRe)j
首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。
3{(s|w nM2f y3K \X?'egN:i4q
我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。 -o(N+N8N? r

*Ws*p9Ho7fVk q0v0f 下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: $e3bn.k8O8u9m5|%C&O.e
j8_Ul A {
[code]/*********************************************** P%x%h\ j/tP
/*
M2dL3{jb0g.G /*dbtest.java
!V*U;fgSP? /*
5Ny { B c /******************************************* */
'r6p;b_%erxE5t
ya+`8?4|_ggb B import java.sql.*;
/LVfdU
la)Vp JT1|+wf public class dbtest -F/My3fX\$A2\a
{
W$u6[t*Q!Z
W8nF-n[ Fy connection con;
AJq R$Cs/LE statement sta; #z"^7QgoPm$}+I.w
resultset rs; 6A!Z&j9JxR(u)F o
A.gbh8T_ | G
string driver;
V9~,u W0T^ string url;
mO;x!G,px string user; 0j \,[i-V
string pwd; +{HoH H\,y,_8A@
public dbtest() |+J H6A9F${*g%D
{
%RM5K'K)k5C*g0|D driver = "com.microsoft.jdbc. gP][.~by1|O
sqlserver.sqlserverdriver";; -Kz;qS+Wb
url = "jdbc:microsoft:sqlserver: 2E/["\7m t xd
//localhost:1433;databasename =test"; {`6Cl:{zF
//test为数据库名
v6[+u?8b user = "sa";
'H(rOD6Q\ZG*QacS pwd = "sa"; f cA P\Td(zI,y
//请更改为你相应的用户和密码
1o8A'ja1y init(); S5J8rex
}
x0g:_RNuaI public void init() 'r d a[IW;U
{
XO{0MM o2h try{
4R,H_9]I class.forname(driver);
7RL(ia7Y;W g:~.] system.out.println("driver is ok"); 5BM#OYQ aj6s
con = drivermanager.
g$\DQ#Z"W#j getconnection(url,user,pwd);
T6U/s {#c_&d0F:N system.out.println("conection is ok"); yWo,h$K1I
sta = con.createstatement();
NI/bK,R7Bp rs = sta.executequery #d P%UAg;`
("select * from room"); tet4W$_^u
while(rs.next()) D(M&Q3v:zMkmFo
system.out.println 6f0F@i:O%`
(rs.getint("roomnum")); ?!|(V!s O?
}catch(exception e)
oNT'qA-W { CKvU4S\d v/a
e.printstacktrace();
][3~1PFR7d0G }
D'^1o*q!s;ii:{ } uj]f-{ Wr

n$FU qd8ZK1ud^*J public static void main(string args[])
M8F:W r(}8F l //自己替换[]
c ZXVu3H ni { jjc'o_'x!y;y1zs
new dbtest();
tL"f;yR$H }
g@"Dk B4cz+j } [/code]
YrC P9x\ `/Dx3T "`j ?+? a,]W
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok
)T$[W8TD1|#J? P@ java.sql.sqlexception: [microsoft]
5O J}c|!?d [sqlserver 2000 driver for jdbc]
9?,[a&I(mF1P V9F5u error establis ^/^7gm;y
hing socket. 7kxqU8Iv k
at com.microsoft.jdbc.base.
4gFM+I{1p)\6v baseexceptions.createexception(unknown source
BU(Pv3[I | ) E x;t;dq3nMy
at com.microsoft.jdbc.base.
7[ E.`+BW(@ZM baseexceptions.getexception(unknown source)
UXvnC9a QO at com.microsoft.jdbc.base.
@(AbZ%I&v/Aw baseexceptions.getexception(unknown source) /X'X'_#JA+[']O!X
at com.microsoft.jdbc.sqlserver.tds.
#e c(qQrMEY&@ tdsconnection.(unknown source) (qlrBT$u:U@$m
`Wr Z,y(M _
at com.microsoft.jdbc.sqlserver. +d v^ Q!X!E R
sqlserverimplconnection.open(unknown sou #d$B's:I,F/z"h-MH2[
rce) Qgic6p}|'B[m
at com.microsoft.jdbc.base. ?Mx U&\~ i_f(f `G
baseconnection.getnewimplconnection(unknown s g.\1QnHLa&E
ource)
/N.ii.\3m|?Wg[ at com.microsoft.jdbc.base.
c0W;`h8e-VsL/{Y baseconnection.open(unknown source) K!hR:C!c*` q&}
at com.microsoft.jdbc.base. ,aMgLC
basedriver.connect(unknown source)
MA p;WY;H$e] at java.sql.drivermanager. ^6Q@!MFR `,n ZDJ
getconnection(drivermanager.java:523) p#O,C L(e ST
at java.sql.drivermanager.
T GpW+Q/aB%Q getconnection(drivermanager.java:171) %H:J^)}CrQt
at dbtest.init(dbtest.java:32) {,NWykL:c
at dbtest.(dbtest.java:25)
_7c8],z6U^-q,J+o at dbtest.main(dbtest.java:46) 0Lxg#Sgn T9g4]
press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok 7A Z"t9~})Wy3Y
conection is ok
;|5~V(j(GT9y9J%V#~ java.sql.sqlexception: Jq*mF+Sn
[microsoft][sqlserver 2000 driver for jdbc]
[(H3p8V/Z6zE-it [sqlserver]对 jaP0pp!Y m'ZH
象名 ’room’ 无效。 :\Bg!A IR,W
at com.microsoft.jdbc.base.
MR$f7}r^ |T baseexceptions.createexception(unknown source (X+Rx.h)gq
:^h~/ea buCX#I
)
AO$\*Z^!SsO(N8U at com.microsoft.jdbc.base. i q;hD)C
baseexceptions.getexception(unknown source) -AT}Q;W$` s {
at com.microsoft.jdbc.sqlserver.tds. ^O_GBL
tdsrequest.processerrortoken(unknown VND$J-I4ZK#aF
source)
q ^D1I B$\ k at com.microsoft.jdbc.sqlserver.tds.
~?_+@UG*q1m\A*m tdsrequest.processreplytoken(unknown
~NTV)IaX { source)
:cF~J S0Z` at com.microsoft.jdbc.sqlserver.tds. 9ln%t@3e;F J QS
tdsexecuterequest.processreplytoken( 8fC8~$e[n5rw0E
unknown source) od9K5I.oh+A
at com.microsoft.jdbc.sqlserver.tds. GsOvCW F#[/b
tdsrequest.processreply(unknown sour 5O8D4@#h~-@]x0Q&A&Q.\?
ce) MQ@3F Q5[9FUl R
at com.microsoft.jdbc.sqlserver. b6F Qsn P1h
sqlserverimplstatement.getnextresulttype %Aj$D X_K}
(unknown source) |/^c-Jc JE
at com.microsoft.jdbc.base.
Gv![A-uFA^"\z7x Z basestatement.commontransitiontostate 2yfK1piUGy
(unknown
IP{Qk2X source)
8L K7_HM g at com.microsoft.jdbc.base.
"YwW D$[X$PEM basestatement.postimplexecu "eH[:SY
te(unknown source) I:ya$]/^/V@u

ZP)}{!Hax2yB&B at com.microsoft.jdbc.base.
;C9[B F o4}pxj^ basestatement.commonexecute(unknown source)
'Kl:tS$Z.AxGV at com.microsoft.jdbc.base. 3E%i.J@dy G O
basestatement.executequeryinternal 5k5J#B)M \"G;g a5\
(unknown so
gYh2t ^5A(x8g-tN urce)
S kh4[|xr{ at com.microsoft.jdbc.base. wW'DQW nw ^
basestatement.executequery(unknown source)
}7|i5t*sY G/J.h at dbtest.init(dbtest.java:35)
\ }#k1xZ&D[j3\ at dbtest.(dbtest.java:25)
$Z)jPu X5[ at dbtest.main(dbtest.java:46) r+f]l+mthql
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  h3],ria(Rf$B
2d/tP0}6PGgz
在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok mlp v kM~q(lK9[
conection is ok
`n~E4T2g 1001 1@n A(V?2|i c/E ?
1002
"cI+b3j i Y 1003 lf,Y,sE ]
1004
X^0yrob:P&N 1005 'lK @@\
1006 ^ Z)}|B{(LFsAP y
press any key to continue... [/code]这次顺利通过测试   r!B XKdAW;}
Nn h"U1z
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  
5pw[;`8ga6r0m 5W!wR\+zz ml9p
[b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

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


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