捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
Po-vV6H7c )]3dr0BP.]0k4Y
首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 .i~S yBt
i+C$lA a(U
我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。 4LV"\b1_:cc

aGMtkf {B,r 下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: _d4Xf+D6C
"Pl8zM0AL~
[code]/*********************************************** ?$u0d M1k0ro1@'i
/*
V-l/k^ {"W5} ^ /*dbtest.java 9[N6sncJ
/* ~[*M(|\w
/******************************************* */
3Zrr.M#lhM{
{qk$X l5|Q.Hk*X import java.sql.*; -y6ZSx3CM

XL.j!~V.xe public class dbtest A|(f'u;bp
{ @.kI"Rvcb0s

)A'zI)DN connection con;
5ZRD N^#{4qz?XW\ \ statement sta; ]/W:OG7m]| h s
resultset rs;
TD @5tt,}
7K-flP,P+] B9I rY{ string driver; i#vSR3aI
string url; JFT?7D1\Ht,m
string user; *]fhXI|(pG
string pwd; 7C-B u Dg)`'g
public dbtest() l:\'s2_ c M
{
)b7z/x _5q{^-eb driver = "com.microsoft.jdbc.
D\5t8\*g DC sqlserver.sqlserverdriver";;
$fJ%nqO'm url = "jdbc:microsoft:sqlserver: 9w-i?0^$I
//localhost:1433;databasename =test"; DJ4^_-ip)C$O+~
//test为数据库名
6pku(c0^"c5A1d user = "sa";
)W8cnav$d"T"d__ H pwd = "sa"; w-r%Q:Y@5k*mc
//请更改为你相应的用户和密码
8jG4x1[&J%z"rA init();
dg U1\6M,_+U } e]$a4c'f$I_+z:k
public void init() &dl4FYU'y;m`
{ f.\ sX?4m'bz/G#A
try{
+j2@Q/]IVs(n class.forname(driver);
p J:\6DaD system.out.println("driver is ok"); #f] Q@3M
con = drivermanager. 5\/tD:gN'[
getconnection(url,user,pwd);
SPz.j'xt Z|b system.out.println("conection is ok");
pC|j#?%y"D sta = con.createstatement(); ;jK,`AhU!Y
rs = sta.executequery
N,CRJ}:[,v3i ("select * from room");
X(Q cj!U while(rs.next())
"Y K8I#jgo z system.out.println h| I)Y-eOy
(rs.getint("roomnum"));
ke R5g\,o!H }catch(exception e) l:o @IP J/m0YQ
{ n%n'iyk\"a$A'r0x
e.printstacktrace();
9t7?'B%BG n } aKm3B$ct*{
} u&q/C;Ui5N
)ZN}*MI,@ Q
public static void main(string args[])
| z+w `$P //自己替换[]
)[oe4l$I8K3F.zV { &h,RH`M&a
new dbtest(); mQ6@ z HD!SE
} z3{r8?jjSv
} [/code]
XY;Rp(d6}yH&O
qn$ov i B%Sq 按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok
^*VS Ut java.sql.sqlexception: [microsoft] b ID'Y.S4[]
[sqlserver 2000 driver for jdbc] p;w1gd{9Z-q
error establis !NLe8y2sQ
hing socket.
!k k;bq3o at com.microsoft.jdbc.base.
@4O"gD d^o Rz baseexceptions.createexception(unknown source k.p8s'NuZgki
) h$Y#AB]h!^ LF2s
at com.microsoft.jdbc.base.
*{~IN%MB%s$@6G R baseexceptions.getexception(unknown source)
KU g,E F at com.microsoft.jdbc.base. Dqg$s!? jm6^
baseexceptions.getexception(unknown source)
V:O5f8BTe D at com.microsoft.jdbc.sqlserver.tds. Djx"V-mQM*jc
tdsconnection.(unknown source)
Q&?-^ i;\F;\Pk
&Dn:F6[ o/H at com.microsoft.jdbc.sqlserver.
Q Z:^7FC+o T sqlserverimplconnection.open(unknown sou
v%V6m } G]Z6d8gZr rce) ^f;[oq:p{ O
at com.microsoft.jdbc.base. (Cn1~g%e)Vpt
baseconnection.getnewimplconnection(unknown s #^v U0a.HZu r)j
ource)
6~;V/ru~2{9z at com.microsoft.jdbc.base.
0_u8o6b Lm!hd av baseconnection.open(unknown source)
H*a3~4YM'byK at com.microsoft.jdbc.base.
'f_)E/f2Z,t basedriver.connect(unknown source)
"Qz3b8G!C Q0_0~(ie at java.sql.drivermanager. ]X8~e8D7NmvfX m
getconnection(drivermanager.java:523) fCB$?4ORe
at java.sql.drivermanager.
'Y"c&Rw;I)Z'C getconnection(drivermanager.java:171) lgz9} R1K
at dbtest.init(dbtest.java:32)
Yw$Y+~8P(v$S$Q7h at dbtest.(dbtest.java:25)
&U.w-le?&e$x at dbtest.main(dbtest.java:46)
7WfR5]4[l K fX press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok
|sNH1to j(E conection is ok 4N0w-_ g9rT
java.sql.sqlexception: 2^0cKf f)x8a'z Fvf
[microsoft][sqlserver 2000 driver for jdbc] @)Pw4REh-g"x!?L&l
[sqlserver]对 (P:B~7_"B#kIt!y
象名 ’room’ 无效。
Va1`4}I;T9Z at com.microsoft.jdbc.base.
g0Z&U#g5{*qc)r baseexceptions.createexception(unknown source t)\gn3JFN/\3|

4I?/z S'rCR!f ) e%xS%uMau
at com.microsoft.jdbc.base.
7yE?YB9[ baseexceptions.getexception(unknown source)
(ttt @A[ at com.microsoft.jdbc.sqlserver.tds. 4oOb ep%J$r(u
tdsrequest.processerrortoken(unknown ;?%lh#LG
source)
0IVFP:x at com.microsoft.jdbc.sqlserver.tds.
a/t-nvL8} tdsrequest.processreplytoken(unknown AlY4?#Q%g1tY\
source)
*B6TJQ7p at com.microsoft.jdbc.sqlserver.tds.
G-wDc;?#x5N tdsexecuterequest.processreplytoken(
/J yC%{x unknown source) 1z:Q E?2V:r-q8X
at com.microsoft.jdbc.sqlserver.tds. "c1YqY2}@
tdsrequest.processreply(unknown sour `\FWS0L+_
ce)
SBekm5t4K5? at com.microsoft.jdbc.sqlserver. 4? |2Xl#i?OY
sqlserverimplstatement.getnextresulttype Du W3|"t-q
(unknown source) &T,t/w(c"Y c _Ox X
at com.microsoft.jdbc.base.
0uEKWk7l8fB6F"_] basestatement.commontransitiontostate
]X.z-k;gn)Asx (unknown
ir0O(f}.agP*x source) y[;B};L4WAP
at com.microsoft.jdbc.base.
c2{Ps8lku basestatement.postimplexecu
M6_&e-DS te(unknown source)
I9m)Ab mE 8k_(i8Sb#N
at com.microsoft.jdbc.base. n1ldQe'S
basestatement.commonexecute(unknown source) u3W @M2g
at com.microsoft.jdbc.base. +f:d9JQ!s
basestatement.executequeryinternal 3v~"v_ rbg
(unknown so bu;k)AIX
urce)
-mN a S#ubH8S$Z at com.microsoft.jdbc.base. e8gpBDLsv
basestatement.executequery(unknown source) 1n cS]/G.w
at dbtest.init(dbtest.java:35) -K w0a+WF;@HK
at dbtest.(dbtest.java:25) R7P5FYc
at dbtest.main(dbtest.java:46)
/js[8E2s press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  
b;tm*VgA4T8Xt-T
1]4}J"@?"}z 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok lG| h5M
conection is ok
O QeN t2`~$\|#F:_O4U 1001
f9p!CML L$F 1002
$I/y] g3bY 1003
[#w \%E:L 1004 u'_n+hg_:E
1005 r0Xa\2|4Y
1006
'm%K&^ z9r0L press any key to continue... [/code]这次顺利通过测试   A|WWp9SO
+C%R!v+R#?
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  _xH*d^ VL'^jJ
e[n v_
[b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

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


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