捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
"E:E O-@ H!Nc ?y
o2q8{1w'Y Cp 首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 0rV)k [6m^*S

ja vtNjN/S8g 我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。 2kG,m+|v,r2p5J1?
2jb[:M$N} Z
下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试:
8S2]8k2hr a6]6{ "or(LMhT_B
[code]/*********************************************** u#S}0`z
/*
@y6BW6e9c-[v /*dbtest.java
9P+})B)`*f4f4S5S /*
It\"E7be,{I /******************************************* */ S)FT E,WtG2E

BqpV+F import java.sql.*;
n)K2z[y.G1s%T${1o]i!W S-gCd1q/J8`^&A
public class dbtest
0?*}l?\p:V {
0jO:c"X l5SgfVk
rI,k4u)u;m*u connection con;
[b(_@ g#^ statement sta;
?`;`^1|,F;y@-F(b resultset rs;
$[]$Ni#U"a
CbnTP string driver; dmk-uM3^9G-Z{([9~
string url;
y;x1re0O$j*x string user; (R b-H4~-w m,P
string pwd;
{]4B8RJ8Z4z public dbtest()
(Ik H`+a8C$k-j9~ {
'U] OV,y h }$Fy driver = "com.microsoft.jdbc.
c[#h']1w^{)B? sqlserver.sqlserverdriver";; H:Ahe T4IO {K
url = "jdbc:microsoft:sqlserver: go#iPQo&o G
//localhost:1433;databasename =test"; 3i,q:IZ C l'p
//test为数据库名
!k4D;{R:?IZ user = "sa"; `1q4ooP
pwd = "sa"; 4swo il4K u
//请更改为你相应的用户和密码 y,O [0FY0Ao n4J
init();
5V)o&U1Ep{5}x+YL } #V5X ]5I yym!u0k
public void init() +n+|| Y/H;S
{
0QPY ^U'I`_K try{ |O6cYC(@
class.forname(driver);
&}1H M1NNC"F:e l system.out.println("driver is ok"); Iv-j3h*Y8Jfo b-v"Q
con = drivermanager. \Ab|-U+[q+gf
getconnection(url,user,pwd); 5W nVAA0p
system.out.println("conection is ok");
!e,r;yh:y:h$? sta = con.createstatement(); ;I2J@0h#Q.mE
rs = sta.executequery xPN0?/XD
("select * from room");
7afBDPc while(rs.next())
%ks_|%r$z system.out.println
$Z)uc*CyUT,|;w%g (rs.getint("roomnum")); $mb:~^:h,iJfpN
}catch(exception e) D;}(l"[5f+Y
{
-n6Xy]V*T u e.printstacktrace();
4z QD4y&i0}#R@(AN }
/A5bJ M|m*w8e/y }
R uGu.O q^zH8D8cW]y
public static void main(string args[]) [PC z9H,u
//自己替换[]
Cg&W2r] {
Y7y)]r(_(ld&Y*RX)F new dbtest();
QL!qC@ }
s'Uh6S.o^+@iB } [/code]
uB QxP9a
$P#A |4q4t1L&c8?l 按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok
]y!aA{8Q2Kc] java.sql.sqlexception: [microsoft]
Qsv&Yn2~$? [sqlserver 2000 driver for jdbc]
&R(aYKF+{0M4c error establis
&E5N BL;a,n2`S A hing socket.
o&k(a3h%I*B6NX+W at com.microsoft.jdbc.base. az Uu9B
baseexceptions.createexception(unknown source
&w*k)e9YmC(rf ) +p Z@ L3Q"[(\n
at com.microsoft.jdbc.base.
5R jJ-`g T-J0Y baseexceptions.getexception(unknown source)
VrNx#pu&f at com.microsoft.jdbc.base. #QZ@8TRv
baseexceptions.getexception(unknown source)
sL g(m(A e?| at com.microsoft.jdbc.sqlserver.tds. +nfXY0X_"e WpE
tdsconnection.(unknown source)
a~P/@'G^/K v UCnjI&Cbn
at com.microsoft.jdbc.sqlserver. )iX*nbY"AP
sqlserverimplconnection.open(unknown sou :xQ` K*K$b
rce) 6q,Q(u#rUK ?V-d
at com.microsoft.jdbc.base.
0J ?ziB$d#El:j baseconnection.getnewimplconnection(unknown s I|[CvA'D?
ource) prT%u6Pq#|'W$P
at com.microsoft.jdbc.base.
B {[!S&ba(ni \ baseconnection.open(unknown source)
r]Et+ot at com.microsoft.jdbc.base. .^ Q1j K*?r8u6q{,?8~U
basedriver.connect(unknown source) gK k)p['z7F8U
at java.sql.drivermanager. BQH:t0Y4@y0W
getconnection(drivermanager.java:523) \.Lz|#[+z?q@
at java.sql.drivermanager. LM}9jP-m7WP7S5G
getconnection(drivermanager.java:171)
)[7]5X8E1B at dbtest.init(dbtest.java:32) -z-\e)qwh)c]
at dbtest.(dbtest.java:25)
m&M;c[5g at dbtest.main(dbtest.java:46)
]5X)@ A;M3u press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok ghQ rM ["@PZ
conection is ok p O|{ T X!Z
java.sql.sqlexception: &L&?&J _@ v-b!]!]3Q$^
[microsoft][sqlserver 2000 driver for jdbc]
9G8r8XCB^G [sqlserver]对 Ta?-X~RB K W
象名 ’room’ 无效。 j+u|M^&qKy
at com.microsoft.jdbc.base. y.J][C
baseexceptions.createexception(unknown source "d0s{![ DnF
[H3Vn]KCx5F
)
QfE`w7_3z } at com.microsoft.jdbc.base.
rL9TP1A7F2Q baseexceptions.getexception(unknown source)
g"v.oW|4Y%j.pXZ at com.microsoft.jdbc.sqlserver.tds.
8Z3]GR"^P"V%i tdsrequest.processerrortoken(unknown X_ VF G b
source)
{ ] \] p _+}"w@ at com.microsoft.jdbc.sqlserver.tds. 3ES@4x;Yz+YC^Mp
tdsrequest.processreplytoken(unknown
B7L?p s/\s5| source)
8Y7l*t/k X(^sN.k(~ at com.microsoft.jdbc.sqlserver.tds.
&`,\3}M-pl(E:w tdsexecuterequest.processreplytoken( If e`tf#qS
unknown source) ]|J.I6n
at com.microsoft.jdbc.sqlserver.tds.
z8~"Dm2}6ER u G~{ tdsrequest.processreply(unknown sour ?*dJ9j f*CCc u\5{y
ce)
} [-MbL2@r at com.microsoft.jdbc.sqlserver. ;QG1J$w/lqQ g
sqlserverimplstatement.getnextresulttype (s5Q+TC7aCb
(unknown source)
(F#W9~,e6{s K3I[9H!_{ at com.microsoft.jdbc.base.
0xN7g*X]$Hp]%} M basestatement.commontransitiontostate E%?L;V~J7s#S
(unknown
hD`a3q p4@0? o source)
e:S;rj[ at com.microsoft.jdbc.base. 6`6Bt!Hrxx*]
basestatement.postimplexecu
/Gmr}5LOK|/S te(unknown source) c1A/lmmh
E7x1z%WB.Vk
at com.microsoft.jdbc.base.
xf&j6sXQF A n basestatement.commonexecute(unknown source) /`%PfP l6a7QA*eA
at com.microsoft.jdbc.base.
8dEmO6KG;b&D)}gt Q basestatement.executequeryinternal 'q#t3E;`'d#yb5[
(unknown so
2[F*Z)s.z _^,W9q urce) i2O"CW,J3b
at com.microsoft.jdbc.base.
|a[9c'I basestatement.executequery(unknown source) _\]ox y/G+K
at dbtest.init(dbtest.java:35)
!L9VpcP at dbtest.(dbtest.java:25)
{5B(a^k` at dbtest.main(dbtest.java:46) pW9LF5n
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  
a:La6h.\:tALgRi
"lW0X2f'?7[$RFR 在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok
W P'QZ#YG? conection is ok
.yxC&sRH 1001
%}6Pm'J UxUC%k$A(gQ 1002
KA$Cm"p;_q$oP 1003
*t4_)pI0V1x 1004
7g+bza'P 1005 s HJU b,Z
1006 )hc7d,`,ccU%p
press any key to continue... [/code]这次顺利通过测试  !Y#nRL2|%g \
_4A,J+\#Xz6B
其实这些小问题花了我一个晚上才解决,真是浪费时间,所以写下来希望能使遇到类似问题的朋友不要重蹈覆辙,在此提醒大家遇到问题时多上网查查,多在论坛里问问,这样你学到的会更多,更节省时间,更有效率。  A#bi|G1|me
LZ-T+XM0t5m.P
[b]总结:[/b]sqlserve 和jdbc 的融合问题,关键涉及到sp3补丁(端口开放)还有用户问题,解决这两个问题之后,剩余的便是sqlserver 操作问题了,还有一点在远程操作的时候,要把sqlserver 组设置一下,在安全性里边亦将身份验证更改为sqlserve 验证即可。

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


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