作者:张骞在这里 | 来源:互联网 | 2023-05-17 14:19
在用Eclipse连接SQL2000的时候总是连不上抱出的错误是:“TCPIP到主机连接失败”哪位大侠可以告诉我是什么原因,我调试了好几天都不成功,实在解决不了了,连接驱动的JAR包我已经引
在用Eclipse 连接SQL 2000的时候 总是连不上 抱出的错误是:“TCP/IP到主机连接失败”哪位大侠可以告诉我是什么原因,我调试了好几天都不成功,实在解决不了了,连接驱动的JAR包我已经引进来了。付上源代码,并把错误给出,请各位指教
import java.sql.*;
class Mydatabase
{
public static void main(String args[])
{
String url="jdbc:sqlserver://localhost:1433;DatabaseName=ma";
String user="sa";
String password="123";
String sqlStr="select * from ma";
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("类实例化成功!");
Connection con=DriverManager.getConnection(url,user,password);
System.out.println("创建连接对象成功!");
Statement st=con.createStatement();
System.out.println("创建Statement成功!");
ResultSet rs=st.executeQuery(sqlStr);
System.out.println("操作数据库成功!");
System.out.println("`````````````````````````````````````````````````");
while(rs.next())
{
System.out.print(rs.getString(1)+" ");
System.out.print(rs.getString(2)+" ");
System.out.println();
}
rs.close();
st.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
错误提示:
类实例化成功!
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.ma.Mydatabase.main(Mydatabase.java:17)
38 个解决方案
代码好象没问题,你要确定sqlserver开着以及防火墙没有阻扰通讯。
SQL 肯定是开着的,我的放火墙是开着的,我在DOS下查了一下 并没有发现SQL 2000的端口被监听,但是我不知道怎么监听。但是在其他人的机器上端口号也没有监听就可以连上数据库,并且我的代码在别人的机器上也可以连上数据库,到底是怎么回事??请指教
把防火墙关了试试。或者你的数据库装时不是选的默认的端口
确定是升级到SP3或者sp4.
升级完后,可以在任务管理器找到SQLSERVER进程的PID,在DOS中输入netstat -nao找到SQLSERVER:PID所监听的端口号
SP3应该为1433
防火墙我已经关掉了,数据库也打了SP3的补丁,还是连不上,我在DOS下查看了一下,1433的端口并没有被监听(端口号是默认的我并没有改),但是怎么样才能让它监听呢?
我觉得还是升级到sq4比较好,至于监听的话,好像是没法用什么命令让他监听吧?
1.SQLSERVER网络实用工具->TCP/IP可以查看端口号.
2.或者你可以先在任务管理器中找到SQLSERVER的进程ID;
然后用netstat -nao命令看看对应进程ID所对应的监听端口号,如果不是1433就相应的做一下修改.
如果是SP3,SP4应该会有监听端口的.
再不行的话就重装一下吧,HOHO
url="jdbc:sqlserver://localhost:1433;DatabaseName=ma"; 有错误,DatabaseName=ma好象不是那样写数据库名.
用了这些方法还是连不上数据库,我的数据库端口号还是没有监听,从装了也不行。
SP4包 也没用,JDBC的驱动已经装了,我用的是 2005的驱动 sqljdbc.jar 只有这一个包,如果用以前的那三个包,还是出错 暂时还未解决。
但是我在他人的机器上运行我的程序 就可以连上数据库,很奇怪,我对比了一下,好象是我没有监听1433端口,但是我不知道怎么监听,一般情况下都是默认监听的,我估计可能是跟操作系统有关系。但是不想从装系统,太麻烦。
String url="jdbc:sqlserver://localhost:1433;DatabaseName=ma";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatebaseName = ma"
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
错了把
应该是
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
import java.sql.*;
public class SqlTest {
static Connection con;
static{
try{
Class.forName ("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs","sa","");
System.out.println("连接成功");
}catch(Exception e){
e.printStackTrace();
}
}
public ResultSet getResult(String str){
ResultSet rs=null;
try{
Statement stmt=con.createStatement();
rs=stmt.executeQuery(str);
}catch(Exception e){
e.printStackTrace();
}
return rs;
}
}
jdbc 一般是三个包
打个sql2000的sp4 的包,还有就是jdbc的驱动,建议用5.0
“hlsps(小鱼)” 你所指出的问题如果用以前的驱动(3个JAR包的)是要象你那样写,但是我用的是2005的驱动包,必须象我写的那样才正确,谢谢关注!
kingwenjie() 的代码我也运行过,出想这样的错误
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.ma.DataText.(DataText.java:9)
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
从这几句来看,你的连接被拒绝了。说明你的机器设置有问题~~不在于驱动什么的~~你再次看看你的机器配置,包括防火墙和杀毒软件,我以前也遇到过,还有你把localhost改成127.0.0.1试试~~
用的是SQLSERVER2005,呵呵,去配置工具->sql server configuration manager打开,里面的TCPIP协议启用没有,没有则启用,然后重新启动数据库服务。
驱动包有问题,我也遇到过!去微软的官方站上下载sqlserver2000的驱动包,是个setup.exe的文件,安装上后将目录下的lib文件夹中的3个包考到你到WEB-INF下就可以了。
你应该是sql server2000,装到windows 2003上了吧。这样装的话,就sqlserver会出现不能被外网监听的问题。你需要打好sqlserver 2000的补丁才行。我以前遇到过这样的问题。
测试监听的方法可以用telnet 127.0.0.1 1433来判断主机127.0.0.1的断口是不是打开状态。
另外需要注意的是选择sqlserver的登陆模式,要选择混合模式,不要选择,windows登陆模式。
如果都不行的话,建议你把localhost 换成自己的IP地址试试
装个SQL SERVER2000 SP4的补丁试下
我的系统不是2003是XP,我的SQL登陆方式就是混合的登陆方式,补丁我已经打过了不过是 SP4的
我按你门说的 在实验一下吧 有结果后 我会在这里说的
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
错了把
应该是
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
===========================================================
先把驱动名改了再说吧
你是不是没导入JAR包 或者你的SQL 里的TCP/IP关了
先把数据库服务停了,然后在数据库配置中把TCP/IP那个选项启用,启动服务就OK了!
前阵子作也出现类似问题,SQL补丁打了,也还是不行,后来发现:你的连接串 应该指向具体的实例名(就是你打补丁的数据库实例名)
String url= "jdbc:sqlserver://localhost:1433;DatabaseName=ma ";
打开SQL Server Configuration Manager/MSSQLSERVER 的协议/TCP/IP 点启用
你可以去SQLServer2000的配置实用工具中把端口看一下,1433.
好好卡看看你的数据库设置,相应的服务开启了吗
再就是tcp/ip协议那里这只正确了吗
要你们项目组的人 连接一下你的数据库试试看啊!
楼上的还扯到 系统上去了! 好像 有点太了吧!