捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
OBk&o@5P *w*T-J+i%?~-L
首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 B$v`;IHv4xyV

Z_)|/Sw:o2o^ 我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。 Qu{|VI8a
+p]0R u5Kz1rI
下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: j Dx7?P(S1MB

8wK TZ,] ~]w [code]/***********************************************
WC7N{0{ z8_+O4Q /* WkYo{j&S [U
/*dbtest.java *sx+Vj.SIc6vG
/* Z mU)b M2}]0P/^8^
/******************************************* */
/k7G A'U!C#c7pk
}A2[:{%zVGP8bR"G import java.sql.*;
.t%|;s%GD{S N9icesE!f)[/c#L
public class dbtest (N3Pj+VU9l
{
#GAk;i h'hm7X M7s0{&Pog/S,R
connection con;
v3O V nA:H] statement sta;
!b1Ec7bc-Z-e#C resultset rs;
3[`_/LwM:j
+s1dt @ P'cZ6]1bQ string driver;
b4h)FI;fT;C string url;
v3for8k$]E;Z\%e string user; e"_p-F%kU l
string pwd;
6bS,jw;D1\/z Y public dbtest()
)^|bbE {
d4y@/{?i9tX driver = "com.microsoft.jdbc. w [gD P)uJ? X
sqlserver.sqlserverdriver";;
-yp1[@5z'_k url = "jdbc:microsoft:sqlserver: e'U!C7U0T'Ww h
//localhost:1433;databasename =test"; I7uF,U m:B&NP!H ]8_
//test为数据库名 'Z U%Xned Y
user = "sa"; 7mv1H"t;c0~B[I!@j
pwd = "sa";
bU2oJg'Tl$`v //请更改为你相应的用户和密码
%q$Z/kK/v[ I.|*QC init();
d+C`7P~8~[ }
&F~4OTJe public void init() bB&o"hl}
{
CC7l/{/x*| N try{ { Ni1?FQd] b)m\
class.forname(driver);
c8G.gp5Z~*b{2yE system.out.println("driver is ok"); @m/w`G)]Ux#z3o
con = drivermanager.
.DL3ujv&d_5x getconnection(url,user,pwd);
U0d9?8f$x0g%C7^L system.out.println("conection is ok");
"l(B kac7}w\"w sta = con.createstatement(); dPan7G4m*a&t
rs = sta.executequery :_/G6` [_OD:Y
("select * from room"); %w0NeliK/L
while(rs.next())
`Z;D2n"ERo system.out.println 6zK'`rHix
(rs.getint("roomnum")); ^w1@'U_ob
}catch(exception e) %ec9^ {0FK
{
!X4b}C_x9]b e.printstacktrace();
'K0`$~s~] }
0i'@Nc%g-m[ } M3E7rp"?!nv t@

.SRgC i;f:I$vz0] V public static void main(string args[])
{y B b} ~-T!lo f //自己替换[] G,{"F^4E5e ]\m y(j {"}
{ f}8t5P/v$O9|Tx
new dbtest(); ;C4},lx pD;D{H
} sgpBvm)d~Z0~
} [/code]8`R9z!`U1L Y}
?7l MGmD R
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok :{(M)P(mOf
java.sql.sqlexception: [microsoft]
G!P+U|9A6Ou[X+Cv [sqlserver 2000 driver for jdbc] iDo+Zi-U h4S
error establis ;^\8f D.o4b
hing socket. n y2c ?~,yLn v
at com.microsoft.jdbc.base. c5x E"RXy#CN,k_
baseexceptions.createexception(unknown source
7n(Z'ui;RmE ) kP!_/K3Gm
at com.microsoft.jdbc.base. H#tN^-thH` l
baseexceptions.getexception(unknown source) C$mQP(kub
at com.microsoft.jdbc.base. h)NQ @^R3p7S
baseexceptions.getexception(unknown source)
6qdE&uX#i at com.microsoft.jdbc.sqlserver.tds. 3@(y:p1}` w0i e[
tdsconnection.(unknown source) Hct,t,X6su\
%sm-z[%U!w D
at com.microsoft.jdbc.sqlserver. (I ]IHb(Ds*r
sqlserverimplconnection.open(unknown sou
1H@)A+_9jY}b rce)
7O`3H9`h.{;|nE at com.microsoft.jdbc.base. -[m1Qs Gh v)R
baseconnection.getnewimplconnection(unknown s
&^dp${$]I q ource) l#V3X-X6M,oW
at com.microsoft.jdbc.base.
n,h|df2w3ua"wyj7` baseconnection.open(unknown source)
](Yq9~%^$j#t.`E Eo at com.microsoft.jdbc.base.
$C$ai+z"w/}!} basedriver.connect(unknown source) "el;t)`\!r1l#|
at java.sql.drivermanager.
Mc#w!zI getconnection(drivermanager.java:523)
!z(T;ts%y~ [ at java.sql.drivermanager. (rK0qnO)i"iaV
getconnection(drivermanager.java:171)
;s8u{^m/G p!pw at dbtest.init(dbtest.java:32)
$u-jZ+tp5WQ at dbtest.(dbtest.java:25) a N#_t0@ Pa3O
at dbtest.main(dbtest.java:46) G Od8DW;?
press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok TT+`9i2V#F2l+k
conection is ok Z3WC&yC0P
java.sql.sqlexception:
N jSO;|;@,k j [microsoft][sqlserver 2000 driver for jdbc]
7R^6ce+N4| [sqlserver]对 cE` ?x_L*a
象名 ’room’ 无效。 DKt;s0@6s `
at com.microsoft.jdbc.base.
4J%ue7N2^I1f baseexceptions.createexception(unknown source )oq5{o ~-f6B6qN

H [6fh ?8CUFV )
|k6uh2a at com.microsoft.jdbc.base. ({SONz
baseexceptions.getexception(unknown source) H+{'a-kX3_
at com.microsoft.jdbc.sqlserver.tds. P2UV~t%` ` c L1v
tdsrequest.processerrortoken(unknown
's2e+js5@)aN source) "h5s QG5|_P _
at com.microsoft.jdbc.sqlserver.tds. x4knM4s]R%z+p e ?
tdsrequest.processreplytoken(unknown ,^1P3e#DD6ZP:_
source) bE"q;\mh^
at com.microsoft.jdbc.sqlserver.tds. 2C ~6n*H_ W
tdsexecuterequest.processreplytoken(
'D3hF)fJ7x?~wk unknown source) %fZP(UF9m.]\
at com.microsoft.jdbc.sqlserver.tds.
&M o,GQ"}cG/L5bR tdsrequest.processreply(unknown sour !m4G*`y3YC)t O.L
ce)
pT:h!W9t$Lb a at com.microsoft.jdbc.sqlserver.
iSn2@/@R sqlserverimplstatement.getnextresulttype
KL2ilp S (unknown source)
$M*abw^K at com.microsoft.jdbc.base.
"m f5n Rz9}!G5|{/K9e basestatement.commontransitiontostate '{-z U_*r&e2}
(unknown "A7rL*Q2He u]
source)
H@2d Sl1xm at com.microsoft.jdbc.base.
(@K};?6KPP)p basestatement.postimplexecu
wp`+G(i te(unknown source) +n'R*M(n)z,w\
`Qn \/tU
at com.microsoft.jdbc.base.
1]R"N3Kd)r0I u basestatement.commonexecute(unknown source)
#r&a-o6S$e?2w:a at com.microsoft.jdbc.base. \9^aEXQ+qG r4RMY"M
basestatement.executequeryinternal
8cwh.c/h*o*nCa (unknown so 0e:U`$qM ? oB0C
urce)
oQI#kR\ rp at com.microsoft.jdbc.base. ems M']5P
basestatement.executequery(unknown source) 4u,MvU8n3p|Vl
at dbtest.init(dbtest.java:35)
,FQpYv at dbtest.(dbtest.java:25)
H+PP0r#T] at dbtest.main(dbtest.java:46)
(@"J2[ hL {)c#K0E press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:   QbK)snD5]

2pv1`t+a/q 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok
6?j,L8Y5ybN conection is ok
U-ox6XU,_S 1001 K-e1]7j;k ]2] @
1002
@H%k|#fbJIc*o\ 1003
Oj.z7J2^1C 1004 y1n+g5@\
1005
+Jb3^1SOfId']|l 1006 b|9lS qcX5~1t y
press any key to continue... [/code]这次顺利通过测试  '`/X F*st

Sy%x1t x&X(TSf 其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  
k~;OarWr P
{/qH"h$H3|O [b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

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


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