捌玖网络工作室's Archiver

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

jsp连接sql server问题总结

由于系统需求,最近在开发过程中将系统从原来的mysql转移到sql 2000下,其中遇到了诸多问题,花费了我不少时间。现在把我的经验拿出来告诉大家,好让大家少走弯路,节约时间。
Pq#~7^2sGk v%G | |i%yVw1j/x4{B
首先是sql 2000数据库的安装问题,在此我主要讲些关于sql 2000的版本与操作系统的兼容性问题:sql 2000总共有7个不同版本,适应不同等级用户的需求。 CWjH3B@)a{'nY
K0{+U+F$[7w-{
我试了一下,在xp系统下只有“个人开发版”能正常安装而不出现错误,所以大家在安装时要注意,具体安装时的配置参照相关说明就可以了。
0_5oDy \SE+wXT
2?/{#D1y`X0}I} 下面说明如何连接到sql 2000数据库,首先当然是要下载jdbc驱动程序,最好去微软官方网站下载,然后将下载到的三个jar包放入你的web应用的web-inf/lib/下。接下来编写程序进行测试: _ kN#qaM+z
"fNq+LC`W*^/^
[code]/***********************************************
,q^3ZH5H,k8r*@+w"H /* b_F.}(o
/*dbtest.java d po.h7r_:i+SB w
/* PE;zC$Ja
/******************************************* */ H2Wjjb:L&jew9d
'xE^O N;?'[m*xc
import java.sql.*; 4y|O!ai ZJ
GcX%C `?
public class dbtest g"}yJ;x5Sp/}
{ :_x!M1K.\E

+DOfgvng connection con;
8pMe)h i statement sta;
8{D&A v/X ?&HeK resultset rs; alX9\R f Q
:U!mpFK6i)R0s!S_,hs
string driver;
G&R(oe%{/OQi){ H string url;
x"C#VX3^Y string user;
1~j1Z(R7I2M!t7w6e string pwd; \HtN"F~2i2}
public dbtest()
-GM+r Ex {
6D*]4jw0x|-C driver = "com.microsoft.jdbc. aQ3J'GC
sqlserver.sqlserverdriver";; &{ R:[7V'y|7r\
url = "jdbc:microsoft:sqlserver: 3@7@%r@ Pns
//localhost:1433;databasename =test";
^-r NJ s8k(R.i //test为数据库名 |F(H }#tFqY E
user = "sa";
~^ q+{@ pwd = "sa";
(e9m]j}&ohD\ //请更改为你相应的用户和密码 E3ux#z^{ M
init();
n0vB Ih l }
w!\!GYmU$o3Z9k public void init() !\.I_*`Au#{CJ
{
%t1X'o,s5nti try{ $B| l5Y/D.X3C#G Bj
class.forname(driver); RkA5B7L
system.out.println("driver is ok"); D2X5M5aOJ@-q*S
con = drivermanager.
5J;kl;]BsWA getconnection(url,user,pwd);
9M!_x k zGX system.out.println("conection is ok"); *j tFZ%L+W0BY(Y
sta = con.createstatement();
c8C/uK"@8XG7~ rs = sta.executequery OC^o.N!ev
("select * from room");
.TFP;G1@H^a_!p[ while(rs.next()) ^q-GDiO?R)V
system.out.println
2D'W%qrn [ (rs.getint("roomnum")); UO'ndNC0r
}catch(exception e)
([zD6r x[;c(jkw { bI`Z5GH7m
e.printstacktrace();
Q*p7u IY3G } 1k8a~ jD!V
} ND/_*y!fS Q2`
I(L%N#MP7^
public static void main(string args[])
,T d?!ws_e //自己替换[] |-~']| }
{ YP(^;O"fV]@
new dbtest();
7S7Bayy+fFZ }
7IlW$G@xp } [/code]j*yI,@U

Y Llg.~4_KmQ:z? 按道理讲,上边这段代码应该没错,可首先我们来看一下,如果sqlser服务器没有升级到sp3(在使用jdbc时,如果系统是xp或者2003务必要把sqlserver 升级到sp3,往上到处都有下的),我们看看运行结果:[code]driver is ok ,v$Y:Y%hId,st,~#Wm
java.sql.sqlexception: [microsoft] 'e.l7S$Q7TLY
[sqlserver 2000 driver for jdbc]
g$}y!F*u*Kvd error establis _%{Il/\
hing socket. Qi4]#pZ"k
at com.microsoft.jdbc.base.
-O0b7UX;sn{:R baseexceptions.createexception(unknown source da:Y"@#F5i j;E7J
)
s;YJn`_R(@3j at com.microsoft.jdbc.base.
#NUu+O8h2n| baseexceptions.getexception(unknown source) p @ V{)a[ss*G$x
at com.microsoft.jdbc.base. xm3a1H,Y:\
baseexceptions.getexception(unknown source) ^A0I3|Z"` R6ZL
at com.microsoft.jdbc.sqlserver.tds. et#f1A1o i9_x \
tdsconnection.(unknown source)
!~%s6AN9Xc W'x[Up6r
at com.microsoft.jdbc.sqlserver.
p2sP P O.T"M xn sqlserverimplconnection.open(unknown sou S0l/i{m
rce) 5^)mS:]7X*O2@%a
at com.microsoft.jdbc.base.
4GWr!\5bH9b baseconnection.getnewimplconnection(unknown s %\t%Rw'gV%j$L1@
ource) [:E%` u1y.]
at com.microsoft.jdbc.base.
_m4vX cN baseconnection.open(unknown source)
cy1E"BH$m U'J at com.microsoft.jdbc.base. "w9nl$Oz%Wm0m
basedriver.connect(unknown source)
0^Qn*f!R Ke at java.sql.drivermanager. hC r0Gqs p*M:u
getconnection(drivermanager.java:523)
Mt0`oU2iVX at java.sql.drivermanager. ]Wkerd
getconnection(drivermanager.java:171) /wk9v g1Xt9eK
at dbtest.init(dbtest.java:32)
.SzI4c'|+R8K at dbtest.(dbtest.java:25) &c;\-^*t9R Jm
at dbtest.main(dbtest.java:46)
0T AT0Z&B)o:z:j press any key to continue... [/code]出现上边错误的主要原因是默认的数据库服务器端口 1433没有打开,无法直接连接。如果升级到sp3则这个问题可以结决,我们再来看看升级之后,程序运行的结果:[code]driver is ok
2kvxy;`%SV}pC@8G conection is ok
bLex9?*tf0D java.sql.sqlexception:
;ow0| Vw;V9w [microsoft][sqlserver 2000 driver for jdbc]
E2yR3O.V2Ju ]^;ZF [sqlserver]对 @Cg0A C&k
象名 ’room’ 无效。 5PxTd%yhZ9O/~
at com.microsoft.jdbc.base. t;Z{*c'^+L$R2EK
baseexceptions.createexception(unknown source 6K;oDC4EpU

ir"}y8L ) $|1n4}"G%lfV
at com.microsoft.jdbc.base.
]9L;fWb)F1F sP baseexceptions.getexception(unknown source) _)F)N|u(Yi%?8]
at com.microsoft.jdbc.sqlserver.tds. /R{8},R/Vy
tdsrequest.processerrortoken(unknown
)E f"K `"W u source) u)x)?k(X8I
at com.microsoft.jdbc.sqlserver.tds. "[g'x I1@[g
tdsrequest.processreplytoken(unknown
-e7oRRg u] source) B:n.u(v@;gz
at com.microsoft.jdbc.sqlserver.tds.
E jM$K\:h)i tdsexecuterequest.processreplytoken( 1z-v6D)}L"^!c
unknown source) 0t&W8KL0JV
at com.microsoft.jdbc.sqlserver.tds.
h!|m-Y)_~Z tdsrequest.processreply(unknown sour Vd[ K@
ce)
*K-\do8V4l6fYp at com.microsoft.jdbc.sqlserver.
a%@2C8?A sqlserverimplstatement.getnextresulttype
UtR%V8| (unknown source) [(Js"OX2P)s/ybKmT@
at com.microsoft.jdbc.base.
F5yX Bx basestatement.commontransitiontostate
~ V\@m\&V [:e (unknown 'xh.{ a Q l
source) $ZE|Y}ne#cy
at com.microsoft.jdbc.base. (jKvU f)RJ
basestatement.postimplexecu
t)w*k.{SF y `;{yu te(unknown source) y I7SI]/\/G&bf
lna ^1BP8s!~ PF0K
at com.microsoft.jdbc.base. s+m*y;l(\c"W1]z[
basestatement.commonexecute(unknown source)
t@S5d)B~6m at com.microsoft.jdbc.base.
2Q8]aw6]'M F:jNQ basestatement.executequeryinternal T(zp,R:A)lU @
(unknown so a l[9e!v
urce)
5o~!Y8x8\)DU6L at com.microsoft.jdbc.base. +w)|)^zt9a~
basestatement.executequery(unknown source)
Dt+]C^X at dbtest.init(dbtest.java:35)
@ J[|5pd at dbtest.(dbtest.java:25)
G6N}!M5?(z!H1y%br at dbtest.main(dbtest.java:46) f$K"\x } a1t
press any key to continue... [/code]在这儿,用户已经登陆上去,但是却不能访问里边的数据表,出现这个问题的原因在于sa用户为系统用户,它虽然能够登陆数据库,但是test数据库里边却没有这个用户的访问权限,所以,我们现在为这个数据库重新建立一个用户share,建立过程如下:  ,I2IK(tL&Q5g ^G
8Tp0eou5X Q
在test数据库中选重用户 ---〉新建用户 -- 〉名称选择(这一步中有两个关键点:身份验证选sql身份验证,默认数据库选test)-〉建立新教色share ,此时更改程序,将用户登陆名和密码修改一下,重新运行程序:[code]driver is ok $jL]d2V0IS2v
conection is ok
lZ@sb+e#C}|? 1001
,J?7L,c$d-jM#nk9j4P 1002
u jK Fb"m:A^9w ["x 1003 k Q.a9`4Y+{@d
1004
b4@] V q#s 1005 mF |*tT5^a;EA
1006
ra _&A'o j&O(N4Zj6bp press any key to continue... [/code]这次顺利通过测试  Ejt:E H1T\Q2{

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

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


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