一个让我很疑惑的问题

时间:2021-02-14 20:05:26
我用的是SQL2000数据库,但是在连接数据库的时候我遇到一个问题,想了好久都不知道什么原因.原因只要是因为在同样的环境配置下和源代码,并且已经把驱动放到LIB的文件夹下的情况下(权限也已经分配,在查询器那里可以查询),在同学的机子上可以很顺利地查询数据,但是放到自己的机子上却报错,这个让我想了好久都想不出到底是哪里出了问题,不知道有没有哪位朋友遇到过这样的问题?该怎么解决呢?说明:两台机子上的软件都是拿同张光盘安装,不存在版本问题
代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.io.*"%>
<html>
<body>
以下是从Ms sql server数据库读取的数据:<hr>
<table border=1>
<tr><td>id</td><td>书名</td><td>出版社</td><td>价格</td></tr>
<%! String trans(String chi)
{
               String result = null;
               byte temp [];
               try
               {
                       temp=chi.getBytes("gb2312");
                      result = new String(temp);
                }
                catch(UnsupportedEncodingException e)
                {
                        System.out.println (e.toString());
                }
return result;
}
%>
<%

   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
   Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev","bn","bn");
   Statement stmt=con.createStatement();
    ResultSet rst=stmt.executeQuery("select * from book;");
    while(rst.next())
    {
    out.println("<tr>");
    out.println("<td>"+trans(rst.getString("bookId"))+"</td>");
    out.println("<td>"+trans(rst.getString("bookName"))+"</td>");
    out.println("<td>"+trans(rst.getString("publisher"))+"</td>");
    out.println("<td>"+rst.getFloat("price")+"</td>");
    out.println("</tr>");
    }
    //关闭连接、释放资源
    rst.close();
    stmt.close();
    con.close();
    %>    
</table>
</body>
</html>
   报错:
 
   javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.test_jsp._jspService(test_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


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:512)
java.sql.DriverManager.getConnection(DriverManager.java:171)
org.apache.jsp.test_jsp._jspService(test_jsp.java:48)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

 

10 个解决方案

#1


对了,补充一点,我把防火墙关掉后还是不能解决问题

#2


Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev","bn","bn");

连接服务器不应该用 127.0.0.1 ,不然你换一台机器就 不能工作了(程序在你的机器上他就找你的机器上的数据库,在他的机器上就找他的机器上的数据库),这样肯定有问题。

把上面的那个数据库的地址用 实际的 IP 或机器名表示,最后从配置文件里面读取机器 IP.

#3


好象还是不行,不知道还有没有其他办法?到其他几台配置好一切后都能用,就是在偶的机子上就不能连得上,真是郁闷了.......

#4


好像是你数据库那台机的端口1433问题。我之前也遇过这样的情况,就是在启动了数据库之后还是发现那个1433端口没有开。
你试下把数据库连接到其他机器看看行不。

#5


NOTE: Untrusted applets cannot open a socket to a machine other than the originating host.
JDBC帮助文档那里有这个
会不会是我的系统版本问题?因为在安装的时候我也看到了Untrusted这个出现,不知道这个是什么意思?

#6


你用的jdk是哪个版本,一般用jdk1.4用这个驱动的话

#7


1.4.2

#8


这个问题见过好多次了,很多老帖子
报javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
一般打上mssql的sp3补丁就可以了

#9


这个问题打了补丁也不行,我后来选了个另外版本的系统来装后就可以正常连接了,我相信在前面版本的操作系统那里肯定附带了一些附件,使得无法连接数据库,具体是什么附件,我还真的找不出来......还是先不结帖子吧,让朋友们说说见解,看看有没有不换操作系统版本也能解决问题的办法呢?

#10


哇赛,这个贴子都快一年了,不知道哪位大大解决了问题,我也是这个状况,在单位可以,在家里的机器上就是死活不行,

#1


对了,补充一点,我把防火墙关掉后还是不能解决问题

#2


Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev","bn","bn");

连接服务器不应该用 127.0.0.1 ,不然你换一台机器就 不能工作了(程序在你的机器上他就找你的机器上的数据库,在他的机器上就找他的机器上的数据库),这样肯定有问题。

把上面的那个数据库的地址用 实际的 IP 或机器名表示,最后从配置文件里面读取机器 IP.

#3


好象还是不行,不知道还有没有其他办法?到其他几台配置好一切后都能用,就是在偶的机子上就不能连得上,真是郁闷了.......

#4


好像是你数据库那台机的端口1433问题。我之前也遇过这样的情况,就是在启动了数据库之后还是发现那个1433端口没有开。
你试下把数据库连接到其他机器看看行不。

#5


NOTE: Untrusted applets cannot open a socket to a machine other than the originating host.
JDBC帮助文档那里有这个
会不会是我的系统版本问题?因为在安装的时候我也看到了Untrusted这个出现,不知道这个是什么意思?

#6


你用的jdk是哪个版本,一般用jdk1.4用这个驱动的话

#7


1.4.2

#8


这个问题见过好多次了,很多老帖子
报javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
一般打上mssql的sp3补丁就可以了

#9


这个问题打了补丁也不行,我后来选了个另外版本的系统来装后就可以正常连接了,我相信在前面版本的操作系统那里肯定附带了一些附件,使得无法连接数据库,具体是什么附件,我还真的找不出来......还是先不结帖子吧,让朋友们说说见解,看看有没有不换操作系统版本也能解决问题的办法呢?

#10


哇赛,这个贴子都快一年了,不知道哪位大大解决了问题,我也是这个状况,在单位可以,在家里的机器上就是死活不行,