捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
l*gc$V$k
\/|z7^gyL?mWF 首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。
Wxv sP0S
!tP zJO+A*bPR0s 我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。
`3p_(L b&C:c
;|;f{k(Nz\ 下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: ;PQ5XI aq5j

r4qwj5C O5bM [code]/***********************************************
Q I-K^;d)Q~6IF /* l8}/ZTd@/C+ng)M#_
/*dbtest.java HQ_y+v'U6U7C1d.L
/* j9|Z4g O$t-uVOs
/******************************************* */
,q%x~.O#q Zx#y0T5^4]0R
import java.sql.*;
c#|1ror T5y+o#q^
public class dbtest
(E{q6F `(e lkx { P)O-H n$Ji| u

!b~8C]E connection con; )Ueh,\/m@ |F Q
statement sta; *s;e$W6Z-p$oiZU(wT
resultset rs; 'cP"M,xWr
-b7^nb!Vv+f
string driver; S.u4IIPC G x{1V
string url;
4uh0hI Em k string user;
X%{Re"o J A!V string pwd;
$C_8{/k$y t'i~&kKTY public dbtest() .fkR's6Y"O)T ^8r
{
5[{8Di.HN*hK driver = "com.microsoft.jdbc. tM yz;u#C)wbL
sqlserver.sqlserverdriver";;
/wQ6{J+kC.bC1z url = "jdbc:microsoft:sqlserver:
:TPABiGv!_f //localhost:1433;databasename =test"; \\BsL'j+O2g
//test为数据库名
"Ld1x:{ _QKq user = "sa"; ETCO a7{] [
pwd = "sa"; 7i+~m j+c#g {#Dn,Ea1v
//请更改为你相应的用户和密码 ,dC j~d {(|
init();
.k4m;B_'Tf~dh } p5oTGp!rd3~ OX
public void init() :u RJQ'q
{ Um&tq#nn|
try{ c8y;U[a%aF
class.forname(driver); (r"hAuP,_L
system.out.println("driver is ok"); 6f:m Ca;D0A
con = drivermanager. {7_9|M@9\/q0Nn
getconnection(url,user,pwd);
3@:HTs,l system.out.println("conection is ok"); :t l4z)yM}1N,DS M
sta = con.createstatement();
a6otu'mI(] rs = sta.executequery wu.O.J0~;Y
("select * from room"); |+N&eY,?
while(rs.next()) ,k$D P|6Z.zj
system.out.println
1vO#` f je#?Y (rs.getint("roomnum"));
/`.H!qa"[ }catch(exception e) `&}$CH)nP8{I
{
q6G`)tet I e.printstacktrace();
Sv5Ti @,z } d%O1a!y[q~'IH%u}
} z2e,mTK

2T"] xD'J7Q public static void main(string args[])
r0X UOs/fY0[q7V'VhX //自己替换[]
5wlgG C1l)SANl { dT-ph~%b o7s8Y
new dbtest(); ,co [B:`9]5d@n
} ~5hEw1k y0G,e&N}2X
} [/code]j V%e`&h g2o%HF
:r(b4g/|cis5G
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok 8I(ec m;q@oe
java.sql.sqlexception: [microsoft] 't| ^oGQe \ Y,l
[sqlserver 2000 driver for jdbc] V&yV6z;M]Q
error establis Wq om [g
hing socket. i$uEvAq0]
at com.microsoft.jdbc.base. $fa Sg)q!z
baseexceptions.createexception(unknown source !fB"nUt C(w}7k
)
6T F+Q)W8w B Nv4Q"V at com.microsoft.jdbc.base.
/qXLxS.f baseexceptions.getexception(unknown source)
PcX'Ta4t at com.microsoft.jdbc.base. Hz x)I,zSS,n
baseexceptions.getexception(unknown source) O6Xz o0JR?0H
at com.microsoft.jdbc.sqlserver.tds.
AA0p7]8_^C l tdsconnection.(unknown source) .ff2xVLCG z]
[7JJJ#Vo
at com.microsoft.jdbc.sqlserver. g9xzW)f#D
sqlserverimplconnection.open(unknown sou SUxk,pr!O/U1g
rce) q^{VY
at com.microsoft.jdbc.base.
3z oA;V V/d baseconnection.getnewimplconnection(unknown s
J"I)AR+M!b1X]"[ ource) 9ET%d3} u
at com.microsoft.jdbc.base.
z }(xj.[1~ baseconnection.open(unknown source)
@r~g \ Y at com.microsoft.jdbc.base. k X*LWHC7[;Q
basedriver.connect(unknown source)
7Z&Turd at java.sql.drivermanager.
9nGFwys8~P9J]:b getconnection(drivermanager.java:523)
bB'O"G M&M at java.sql.drivermanager.
m5U h(c^1A9F getconnection(drivermanager.java:171) Sv5qy/L{#?
at dbtest.init(dbtest.java:32) _Y2[{/@Z
at dbtest.(dbtest.java:25) *^4l#u,n;Zh:r,LU
at dbtest.main(dbtest.java:46) &F)x]Zl b^
press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok 6A)q0~}9\9xP/[
conection is ok
bo.T4|,G0WykH java.sql.sqlexception:
a3}d2hq+H [microsoft][sqlserver 2000 driver for jdbc] )rbM3g]E|
[sqlserver]对
ul.L'g9fie 象名 ’room’ 无效。
E9{8q%?:J/Co'rD/o at com.microsoft.jdbc.base. 2}6T9l`"hcx%O
baseexceptions.createexception(unknown source p;u$I)~vT9|0s:c B
*ak;hu9v wX t }v
)
IK l*P&H O pc]({ at com.microsoft.jdbc.base. AL)FBq N*uYIxf
baseexceptions.getexception(unknown source) _ct {ChF"r^?W
at com.microsoft.jdbc.sqlserver.tds.
x^i3n$Hm US'R*e tdsrequest.processerrortoken(unknown *B]t2`&c2dHAv#dU
source)
i8Z ?(o6` at com.microsoft.jdbc.sqlserver.tds.
#r3iJS|9R2pJ tdsrequest.processreplytoken(unknown
x5J6G/bj source)
t CZr HLFHV5} at com.microsoft.jdbc.sqlserver.tds. H,[d7sY)O6r
tdsexecuterequest.processreplytoken( 0f3__A H:xX
unknown source)
kA_6T1{ at com.microsoft.jdbc.sqlserver.tds.
0B#F^(zX6QQ tdsrequest.processreply(unknown sour v h#t2n AZ
ce)
&Qz%RWF/x)R/i at com.microsoft.jdbc.sqlserver. k B QzY8i
sqlserverimplstatement.getnextresulttype
n0q;g2m J i(| (unknown source) i1k.O,}*dic j,q
at com.microsoft.jdbc.base.
x N'o+Puf2c{ basestatement.commontransitiontostate n^8`4vve
(unknown
!}Gh!v A%uS@ source)
#g)}/W_6o0k1L at com.microsoft.jdbc.base.
dFM&v4rO~9u C1d,b basestatement.postimplexecu |N:MCY lO/h
te(unknown source)
VyM8ZF7D
9j8M*Rvw:T9S{ at com.microsoft.jdbc.base. V!c$Nl[*o-\
basestatement.commonexecute(unknown source)
*Our6@%n#^ at com.microsoft.jdbc.base. _ZC[?UA:c8L
basestatement.executequeryinternal
z&?'J4dsZ{ (unknown so
gT5zX a/D7iL3HI urce)
~6TTPB at com.microsoft.jdbc.base.
xchRwH basestatement.executequery(unknown source)
1O0Rw8YwAx+Q$T at dbtest.init(dbtest.java:35) rNg t4n0t/c
at dbtest.(dbtest.java:25) iC KA5i-G_-a)q
at dbtest.main(dbtest.java:46) y3y*A8]QAM.[`B
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  
k dFy s([ as
lT{.z8r 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok
'cF#Eg p m[ conection is ok
{ [:r kd4py1i 1001 )R\\IuA/~
1002 'h.xD)QXB
1003 ^6wz:d}s
1004 %|q h$]S!Q o2N5Xj+W;l?
1005 6\5B.cJXE+S
1006 FB(FXq
press any key to continue... [/code]这次顺利通过测试  (@e/|-h]#d0HD0YFJJ
0ou/Wv(Q(_
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  
Z!m-b6e\G 6L4Z&l}!H A
[b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.