捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
[R_lu
xA.j"V3l Q#n 首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 :OE"J(Y"DP \
8t1S I;uE,dL:m
我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。 ~:k,MvFgw7eD
a6P7WbCb E
下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试:
CV+XS|
Kz{F6O c0T QL [code]/***********************************************
4R/vm {4_ A4mx_ /*
B'Dfr+fX6P ? K /*dbtest.java :y!Z(IJVg0I
/*
P4h;C(e\7x1U+G /******************************************* */
$H3W1a;`1rR-f J
f!V wK+~8A$x^4G import java.sql.*;
,p d e8Y5M*GD4PT,_q
G)ePgeR4V7t public class dbtest ,|$am-]$e"Hi#|d8A^
{
w@/G#u^wa /I_M1Y)X[L z5}+bX
connection con;
J}u ma statement sta; N_^&DB{j
resultset rs; Ej,i"?{9dU
#].@3O]h
string driver;
$I*O2Q#N4H string url; "N'N.@[B qUt8~i
string user;
-d-m"P^S.y string pwd;
y;UZ9j9i k e public dbtest() m%lfP'om
{
@!T8n$e*L,cbS driver = "com.microsoft.jdbc.
:G2be{K,| sqlserver.sqlserverdriver";; Z$Z%Db-r4z
url = "jdbc:microsoft:sqlserver: %M"K!D$BE(c`5K9gd
//localhost:1433;databasename =test"; DI4p4b7o e
//test为数据库名
1kN"B~8^-R|y6VZ user = "sa"; -AT;v*zRmH'cFw}+V
pwd = "sa"; /D$N+}gheb(L,U(nC
//请更改为你相应的用户和密码
.[;k,sdDO&q init(); C)v5@ LQ;kr E
} %a)O%C;?3Q
public void init() 2}@6x6VD1@i
{
X5@~ }| o o6e try{ (KE7xf!t;@J6S/Z#Ea*Wy
class.forname(driver);
z(S/II8^*J}*D system.out.println("driver is ok"); 0vS,B.l5e*l&xY:G+X-k
con = drivermanager.
(n2d RP2j8J3R getconnection(url,user,pwd); #j)ze;?])x j
system.out.println("conection is ok");
:]n {}S^'I:\[xw+l sta = con.createstatement(); *^~7q F6\8N^
rs = sta.executequery
5Y @$C@({/@Gu ("select * from room");
*K:w'RR:\B3wp while(rs.next())
Lne)l'Vg8W,w[_ system.out.println g"|Mw3Iz)D.p9iW
(rs.getint("roomnum"));
_] a d!R-k;S | }catch(exception e)
6zNd!V{(d { 'g[ GZ2G[,O`
e.printstacktrace();
bd\\C%P+` }
erw_pd8J+@r|"t] }
8b1q;w*\&W+J p:w
-X-tn kf3_6C public static void main(string args[])
o$h9P9RUFDI //自己替换[]
0bdR8@`Cl {
f6t0FUoU%E1@ new dbtest();
A Z;IbF,\P+D uC }
OCM.e LT O8T } [/code]9ON7|!M C:TtNQ
il7s6\q
按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok I A9GQz5c
java.sql.sqlexception: [microsoft]
'BODv/kJ'@#Z5_ [sqlserver 2000 driver for jdbc] iGKz#WHq
error establis pk`L} V^N
hing socket.
e-BOa:J0}6p4@} at com.microsoft.jdbc.base.
~} g_3t {5` baseexceptions.createexception(unknown source
CI[[![!x4lZ*z7H ) q6y&}\f?x+N
at com.microsoft.jdbc.base. pq9`&T/?1@RG6m
baseexceptions.getexception(unknown source) l rt/{9~8V
at com.microsoft.jdbc.base. Of3BAZ2Yi
baseexceptions.getexception(unknown source) v+HG.S$Z"pe)g+T
at com.microsoft.jdbc.sqlserver.tds.
_9|+W\.} tdsconnection.(unknown source) '\1WG S"n)T8Y7J

Z-L} P_ a&[Z7S at com.microsoft.jdbc.sqlserver. (v'v$B-tU$C ?
sqlserverimplconnection.open(unknown sou
oZ#G/^ZWg3N rce) x@ w7z'l/_ NF
at com.microsoft.jdbc.base. m?c+v)L5lU-W
baseconnection.getnewimplconnection(unknown s
O ^3yR9U%e L E"f ource)
vg{ UCe at com.microsoft.jdbc.base. Wzq]Ll-I8y `
baseconnection.open(unknown source)
*||{].ax at com.microsoft.jdbc.base.
oW F prD basedriver.connect(unknown source) d6m5[s7k w~ y+n/t
at java.sql.drivermanager.
'P,w)X~|_k ]+D$Ff w getconnection(drivermanager.java:523)
?9A(L1^f[z~ at java.sql.drivermanager. S-\k+[#p8y Tk
getconnection(drivermanager.java:171) NPD$Hu6A&w
at dbtest.init(dbtest.java:32)
&XO|nQE+{ @ B| at dbtest.(dbtest.java:25) 4uqynU)xg1|
at dbtest.main(dbtest.java:46)
&p%WMz8c/M[ press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok
1k[-jm%BXr T conection is ok
'ph:^6m6Hdw java.sql.sqlexception: 4w{F;Aym[
[microsoft][sqlserver 2000 driver for jdbc] c_r)C!F@{PH1S
[sqlserver]对
4{H/mV-t%V U 象名 ’room’ 无效。 uq `0\6v4}"g3[8lO
at com.microsoft.jdbc.base.
rV3q!U1^ baseexceptions.createexception(unknown source
9f!kf_pD2EG W\nc9z z,a
) Rr8I7X/nCf$}(`2A4g
at com.microsoft.jdbc.base.
(K`1Gc` baseexceptions.getexception(unknown source)
nP]Ig6Qur at com.microsoft.jdbc.sqlserver.tds.
ij,^4nB(A| tdsrequest.processerrortoken(unknown
:K"\;j!Tr1}7Za+dDe source)
T c"ma,Pn-aa_ at com.microsoft.jdbc.sqlserver.tds.
Y7CyAj(W tdsrequest.processreplytoken(unknown
9s o r!A T co] source)
qnY1S1f4c_X/A at com.microsoft.jdbc.sqlserver.tds.
r8c[T!k.ah tdsexecuterequest.processreplytoken( J%O,g"u.GS
unknown source)
L6L3i0} [Q at com.microsoft.jdbc.sqlserver.tds.
1l HRBkw5cL7f7W tdsrequest.processreply(unknown sour
3fwQ-W)GfjDp ce)
]@~z B/H at com.microsoft.jdbc.sqlserver.
A|-B?1j,K'dM"\"c&] sqlserverimplstatement.getnextresulttype
S0j5\.E2J6m (unknown source)
KV }i)DBFr at com.microsoft.jdbc.base.
0S!Pf&M0x[g:J basestatement.commontransitiontostate
+l pSdu (unknown
a2v!P0D,SJ source) V Sv,|{3F Dllw@8v
at com.microsoft.jdbc.base.
d r'WuC*hb n basestatement.postimplexecu ,qc1e9nv?}
te(unknown source) sZbqF l

a FX |0d4uk+vZ at com.microsoft.jdbc.base. 4?,Pi#x{l
basestatement.commonexecute(unknown source)
/\:e M"{9p;xTMK at com.microsoft.jdbc.base.
a-cR B]S#}? basestatement.executequeryinternal
+w#ard&@ wW7o (unknown so
I\_F_2~ O0g5f urce) ,a$OYM p/? g6c3W
at com.microsoft.jdbc.base. WT;D/y5_.WA v
basestatement.executequery(unknown source) .iX6Hb/Xf{
at dbtest.init(dbtest.java:35) *nRgYL
at dbtest.(dbtest.java:25)
s b2|u\b at dbtest.main(dbtest.java:46)
yo:DWn\? press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  
JhA]a@6?)hH%O
i~H2wW 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok !]5D"S g$W,?P:A1t2^
conection is ok !x2W4v1R,R!m} [Pr(rM
1001 'j9Er QX}
1002
BZ4W-u,r&`9h 1003
h~8g`kV8W bC NU 1004 2Of9q _{9t|?&X"y
1005 {Y-{A!}kxE-L^
1006 +x ~0z"Rn9C G%czl
press any key to continue... [/code]这次顺利通过测试  r,[:b6U.g{7Z`

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

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


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