捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。 2oZLJBl;V
:@#CtM#@ R^0F y4M N
首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 o[*kC q

c5~+`#? \ 我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。
ASKN1Q s#t*j D4h-Y@4` Pf1{
下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: y%qh:E)j[
&|,Z d?d:\#F
[code]/*********************************************** -L*Z^-y,[Bj5P
/*
z)V3JC|Gu /*dbtest.java
}5Glw `L /* $vc3L x2N)D iJ
/******************************************* */ 3[#c`A `I
k6EA%qM;t%OA
import java.sql.*;
`Cm7Obx 2o8nQ V,Z[
public class dbtest w6D)G1|Wc;Ty
{ I,\G@2_)?~l
Y3t:hW"qdj7y
connection con; 2HO6\'A/P-R
statement sta; #oF%RFc%B4N)E
resultset rs; %gv W.S+].P4^c3evE
#Eyr3v3N [A[
string driver; !|6f5C)]raAu
string url; 2Q2S _v Y,a
string user; ^V/e| U!O"Wy)T
string pwd; r @IDwWll
public dbtest() tZ,H[ h.]2x&b P|kh
{
s!t~1LI)ktI driver = "com.microsoft.jdbc. 8Al Jk5},f
sqlserver.sqlserverdriver";;
7e\:]4|XI1f2fG url = "jdbc:microsoft:sqlserver:
Dr;gx?9@"Z g2{!O&C //localhost:1433;databasename =test";
!e,q/WF/];m q //test为数据库名 L_.IH_+v r jy }
user = "sa"; $v({j(ZC!P*~K&Xu
pwd = "sa";
p'{\pa //请更改为你相应的用户和密码 $W$CX2_8jJ#PG
init(); 0bKje kp
}
cD!`0LSH"TZ6[ public void init() oNJQP
{
t(CwIk try{ 6O'}4w0zI
class.forname(driver); .vrR {fnk
system.out.println("driver is ok"); OIc dw?A/N3N9|5Nq_
con = drivermanager. ]1QCph^Qd:r
getconnection(url,user,pwd); '\+z3R t/L
system.out.println("conection is ok");
D!dxe3Q4r7u sta = con.createstatement();
*~'M#]M6OjI rs = sta.executequery p{ f L-Q+zb@
("select * from room"); V7W7m-N5\T'{W
while(rs.next()) tF9F{ d XF
system.out.println
5RHj8S9_u FSm (rs.getint("roomnum"));
qGj`&U,EJ1W)K }catch(exception e) d%~6[hBC1j"W
{
:j6A DC6d'J9X e.printstacktrace();
zb%xDJo)U5JA-V } UC(`-V6u!Bi
} 0_Jl4L(`;XW6Z,f l5y

wJm5}av7D I public static void main(string args[]) U!UFQ Nm[a$H
//自己替换[] 1XN7X#nm'mI@]
{
+JY-\$EsPNf new dbtest();
Cg!|1TV ^ ~?P } c f1m Jg`)I
} [/code]IL ca tV

S0[ @2X?\-K 按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok 8y%d d S(q/SA#w
java.sql.sqlexception: [microsoft] ]`X8j!jEa9P)h
[sqlserver 2000 driver for jdbc]
!I4b9^!j2E.}4o error establis
@UI2w3YUjA hing socket.
!s-z~"\(h1B X#h at com.microsoft.jdbc.base.
S@;i)J s%R? baseexceptions.createexception(unknown source
#t$}8V P6J )
(p.pQ8Cv5D at com.microsoft.jdbc.base.
J/hU?A \o baseexceptions.getexception(unknown source) +H*A3Y5rNn-X Bp(Y
at com.microsoft.jdbc.base.
qHL2Xw5B7rLP!G8i baseexceptions.getexception(unknown source)
}i X&J1rM3F at com.microsoft.jdbc.sqlserver.tds. 7r3@w0I2}'?/t
tdsconnection.(unknown source)
&YEa3p H:n1u%a"of _tJ J'Hq
at com.microsoft.jdbc.sqlserver.
*k^ NG+g S ^ sqlserverimplconnection.open(unknown sou
!Qj3w*d:n t rce)
Lb lKe F,M8z at com.microsoft.jdbc.base. 8|"A)k#H:{)?K.P
baseconnection.getnewimplconnection(unknown s p{6l[(P5\3|
ource)
LQ/N'O:T%jq at com.microsoft.jdbc.base. m1~Xm,{4R9rh\\
baseconnection.open(unknown source)
?e"GS%z4|t at com.microsoft.jdbc.base.
#n_T(\H basedriver.connect(unknown source) (G!_(~7ki,N3i
at java.sql.drivermanager. xGLD*RK7n
getconnection(drivermanager.java:523) :A2{4RUsp
at java.sql.drivermanager.
@q v)gn,i getconnection(drivermanager.java:171) #S-UmYW/v0Q
at dbtest.init(dbtest.java:32)
a0s%h_9k|,v at dbtest.(dbtest.java:25) .U3l-w Lo p
at dbtest.main(dbtest.java:46)
R[5` t3x dI'N)@3i press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok
i!]7NN c u j:w conection is ok
(gU q5tY_ java.sql.sqlexception: Gp.Z%aVF'_%P+G
[microsoft][sqlserver 2000 driver for jdbc]
qx;O}9e [sqlserver]对 &ytgFVD
象名 ’room’ 无效。 J$__4[d R*bt
at com.microsoft.jdbc.base. teUK8A5W j0qn
baseexceptions.createexception(unknown source ON M$F m
9`H$} TiX#I
) pq{pmb%F
at com.microsoft.jdbc.base. ;v4K9`#H'mW Pu
baseexceptions.getexception(unknown source) ^?1gKv d DO
at com.microsoft.jdbc.sqlserver.tds.
q'wotG*@7L tdsrequest.processerrortoken(unknown
&n-rW|q+]9w)kV Q source) *l4XM;zSmy$Z
at com.microsoft.jdbc.sqlserver.tds. /f z?*_+`b:Z'J4^
tdsrequest.processreplytoken(unknown
8e[.i2c%o)a o[ source) 3j"N9LA^0f/|]
at com.microsoft.jdbc.sqlserver.tds.
-vqc;f2m:l tdsexecuterequest.processreplytoken( /S Yj6LsE`
unknown source) 7X&k,BGu!FFA5yu
at com.microsoft.jdbc.sqlserver.tds.
[2UbW8x\d tdsrequest.processreply(unknown sour ~+va1k+Xr^
ce)
P Zd%S3A(F0Ts [A T at com.microsoft.jdbc.sqlserver. W8p&KXU\
sqlserverimplstatement.getnextresulttype )D s$W,Wgi,k%wk5w$Gm
(unknown source) #f7lLCf!zd
at com.microsoft.jdbc.base. 2a8N6l+la\
basestatement.commontransitiontostate 6OiZ,^P&@
(unknown yk"An\sJ*A ~%w
source) #aA Uu^ [$C
at com.microsoft.jdbc.base. CRyIu"N YGV
basestatement.postimplexecu D6TD!v*`$U6q:t
te(unknown source) 9^ad9mW,|(z$i

$zs'LD |z h su at com.microsoft.jdbc.base.
#Q5L4C1~{5L8S.\ T basestatement.commonexecute(unknown source) /wG?_COdE2TQ
at com.microsoft.jdbc.base. 2}jNd~&|#a }
basestatement.executequeryinternal nP.pR MM@4d
(unknown so 3t`?&a a
urce) 1N/y"`,|(} h8RB P
at com.microsoft.jdbc.base. G,a2c9k;Bt c
basestatement.executequery(unknown source)
Q7N]a9VA4~*w at dbtest.init(dbtest.java:35)
,Cx&Yu6T!K/s2nh at dbtest.(dbtest.java:25) 7tj%Vf-L1B~
at dbtest.main(dbtest.java:46) 6PH(] aaW$cq
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  NDu5L\r `~
L3~/Q(P;k/OsvU+k C!T
在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok &z2| Lkv t)@u$c,J
conection is ok
,c#^'?RS(_9m_ 1001 LF;@0g w.u
1002
5M-a^?8m ]T 1003 "P4V FuIyX&R0l
1004
6Mp)Z](`(i B!u [7w yC 1005 ([2FQmx0UkYf
1006 R ~EX Uq!XW\
press any key to continue... [/code]这次顺利通过测试  
6FqaDN0sw +k6KI*c(dF3E`
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  
k a6_-rt]rt 'dXFIX#t0?
[b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

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


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