站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题JSP程序连不上SQLServer2000数据库!

JSP程序连不上SQLServer2000数据库!

摘要: JSP程序连不上SQLServer2000数据库!


我是一个jsp新手。现在写的jsp程序连不上数据库。我的所有做法是:
1.在本机上创建了一个数据服务实例5F-125/DOG,设置混合登陆模式,用户名:sa ,密码:1234
在里面建了一个数据库ABC。
2.下载了jdbc驱动,安装目录为C:/Program Files/Microsoft SQL Server 2000 Driver for JDBC
3.将安装目录下lib文件夹中的msbase.jar mssqlserver.jar msutil.jar添加到环境变量中,做法
是在CLASSPATH下添加了C:/Program Files/Microsoft SQL Server 2000 Driver for JDBC/
lib/msbase.jar;C:/Program Files/Microsoft SQL Server 2000 Driver for JDBC/
lib/msutil.jar;C:/Program Files/Microsoft SQL Server 2000 Driver for JDBC/
lib/mssqlserver.jar;
4.然后是写jsp程序,连接数据库的部分是这样的:
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName =ABC";
user = "sa";
pwd = "1234";

Class.forName(driver).newInstance();
con = DriverManager.getConnection(url,user,pwd);
sta = con.createStatement();
rs = sta.executeQuery("select * from Data");
5.后来又安装了SQLServer2000的SP4。

仍然无法连接上数据库。
以上的就是我的全部的做法,这其中问题出在哪儿呢?


驱动文件要复制到TOMCAT的lib文件夹下面


tomcat/common/lib


按照上面的说法,将msbase.jar mssqlserver.jar msutil.jar拷贝到了tomcat/common/lib目录下,还是连不上。到底怎么回事呢?


错误是什么?


给数据库打补丁
就可以了


这就是网页的错误提示:

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Exception in JSP: /testdb.jsp:11

8:
9: <body>
10: <%
11: Class.forName("con.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
12: String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NBA";
13: String user="sa";
14: String password="1234";


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

javax.servlet.ServletException: con.microsoft.jdbc.sqlserver.SQLServerDriver
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.testdb_jsp._jspService(testdb_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.ClassNotFoundException: con.microsoft.jdbc.sqlserver.SQLServerDriver
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:127)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:65)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:164)
org.apache.jsp.testdb_jsp._jspService(testdb_jsp.java:54)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.




给数据库打补丁? 你是说打SP4的补丁吗? 我已经打了啊。还是不行啊。


把msbase.jar mssqlserver.jar msutil.jar 三个包放到你工程下面的/WEB-INF/lib里


8:
9: <body>
10: <%
11: Class.forName("con.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
12: String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NBA";
13: String user="sa";
14: String password="1234";

**********************************************

你报错信息的Class.forName后怎么是con.microsoft 你是不是这个写错了

*************************************************



应该是com.microsoft


是写错了,我改过来了。
也按照jsfhua的说法把msbase.jar mssqlserver.jar msutil.jar 三个包放到你工程下面的/WEB-INF/lib里了。
但是仍然有错:

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Exception in JSP: /testdb.jsp:15

12: String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NBA";
13: String user="sa";
14: String password="1234";
15: Connection conn=DriverManager.getConnection(url,user,password);
16: Statement stmt=conn.createStatement();
17: String sql="select * from Data";
18: ResultSet rs=stmt.executeQuery(sql);


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.testdb_jsp._jspService(testdb_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
com.microsoft.jdbc.sqlserver.tds.TDSConnection.(Unknown Source)
com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
java.sql.DriverManager.getConnection(DriverManager.java:525)
java.sql.DriverManager.getConnection(DriverManager.java:171)
org.apache.jsp.testdb_jsp._jspService(testdb_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.





12: String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NBA";
还NBA呢,看球看糊涂了吧,你自己的数据库是ABC


哦,呵呵,这个地方我用ABC举的一个例子。实际的数据库就是NBA。这个地方没有写错的。
抛开这个,那问题到底出在哪里呢?


简单,你用ODBC配置一下,在客户断配置中 地址用IP,用TCP/IP 断口1433,应该是通不了的,
也就是说你这个问题跟JAVA没关系,
你检查你的SQL SERVER 配置是不是用TCP/TP ,是否打补丁了


你的系统是什么?如果是2003,有时候要给数据库打sp3。


没有捕获异常


to human_2(风一帆):怎么检查我的SQL Server是否配置TCP/IP啊?
to fly_to_the_sky:我的系统是Windows XP!
to yfxixi:这个跟异常没有什么关系吧?



我今天刚遇到这个问题
把tomcat重新安装了一下解决了 呵呵


可能是补丁有问题,Error establishing socket,遇到过这个问题
sqlserver2000个人版打了sql2ksp3.exe补丁之后就好了


SQLSERVER的驱动其实不用安装,只要把msbase.jar mssqlserver.jar msutil.jar 三个包放到你工程下面的/WEB-INF/lib,程序的数据源获取代码写对就行。


telnet localhost 1433
看看1433端口通不通


XP SP2肯定也是要打补丁的


xp系统中SQL Server只可以装个人版,而个人版的SQL Server服务器启动后并不监听1433端口,当然连不上。
可以到以下地址下载SQL2000SP4(SP3也可以)
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5

安装完成后,问题应该就可以解决了

对了,要保证数据服务器是开的哦。最好在命令提示符下键入netstat -an命令看一下,1433端口是否已经listening


遇到过类似问题,一个是要打数据库补丁,我用的sp3,安装数据库驱动,驱动也还有一个补丁,打上后就好了.


我这个没有入门的菜鸟也知道一定要打补丁,sp3!!
试试吧!


给sqlserver2000数据库打补丁,不是操作系统。


我用telnet localhost 1433测试了,结果是不通。
也按照geministone的说法使用netstat -an查看,1433端口不为listening,这可能就是问题所在了。我曾经打了一个名字为:SQL2000.AS-KB884525-SP4-x86-CHS.EXE 的补丁,不知道这个是不是大家说的SP4补丁。


连上啦! 我在安装了补丁之后,在企业管理器的SQL Server属性配置对话框中,选择“常规”选项卡,查看TCP/IP的属性,在那里面设置默认端口,默认的值是2272,我在程序中在相应的地方改成2272就连上了。然后我把默认端口的值改为1433,原先的程序也可以连上数据库了。
苦恼了几天终于弄明白了。真的非常感谢大家! ^_^


↑返回目录
前一篇: 为什么jsp+mysql我的程序只能插入数字?
后一篇: tomcat5.5.17数据源配置的问题,熟悉认识请帮忙