今天在连接sqlserver数据库时出现了如下的错误:
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:485)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:553)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:582)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:590)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:622)
从错误信息来看很可能是驱动程序出错了导致连接不上数据库,因此我检查是否启动数据库服务器,服务器已经启动,看来是我用的jdbc的驱动出错了。经测试结果是运行正常的。后来经同事指点,才知道了原因,sqlserver数据库是我新装的,没有打sp3或更高版本的补丁,使端口未暴露,我打了sp4的补丁后问题就解决了。
下面是我在网上找到的一些相同现象的解决方法:问题现象虽然相同但是原因可能不同方法也各异。
MS SQL2000 (Error establishing socket)错误的解决办法-SQL请选用混和安装模式
作者:YuLimin
* Error: get DB connection error. Ex. msg: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
server 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)
---------------------------------------------------------------
无法建立数据库连接,
确定网络没有问题
SQL有开着,
把SQL打到SP3的补丁
SQL Server2000 SP4要注意,解压之后看到setup.bat这个文件,打开这个文件就开始安装SP4补丁。记得安装后,SQL 服务器是停止了,需要重新启动!安装之后,启动SQL服务器,打开查询分析器,输入select @@version,按F5执行,如果出现Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2)则说明SQL Server2000的补丁SP4安装成功
驱动也要对应SP3的.
---------------------------------------------------------------
1、下载Microsoft SQL Server 2000 Service Pack 3a并安装,SQL请选用混和安装模式!!!
http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn
2、下载SQL Server 2000 Driver for JDBC Service Pack 3
http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en
3、运行时关闭防火墙
我的操作系统是XP,前几天升级到sp2,发现jdbc连接不了sqlserver,报错不能连接,后来我下载了sqlserver sp3,安装的时候总是提示sa密码不正确,后来我登陆微软网站,找到关于sqlserver sp3的帮助文档,发现原来我电脑中的用户环境变量没有设置TEMP和TMP,设置后,update sqlserver sp3成功,然后jdbc连接也正常。
希望这文章对一些同道中人有所帮助。
JDBC SQLSERVER"Error establishing socket"
jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433
如运行程序时出现 "Error establishing socket" 错误,则应进行如下调试:
1 检查SQL SERVER 是否允许远程访问.具体步骤:
1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
2)在相应"数据库"上单击右键,选择"属性"
3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择.
2 使用telnet IP地址 1433,系统是否提示连接出错,如系统提示出错
检查是否防火墙屏蔽了SQL SERVER 或 java IDE 的网络访问端口
如果是,关闭防火墙,重新启动SQL SERVER和java IDE,进行测试,
如果系统仍提示上述错误,尝试下列步骤
3 检查SQL SERVER 端口号及是否启用了TCP/IP协议,具体步骤:
1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
2)在相应"数据库"上单击右键,选择"属性"
3)选择"常规"选项卡,点击"网络配置",如启用的协议中无"TCP/IP协议"将其加入
4)选择"TCP/IP协议",点击"属性",检查其端口号是否为1433
5)如端口号为1433将其修改为其它端口号,修改jdbc连接语句,将端口号同样改为新启用的端口号,如jdbc:microsoft:sqlserver://server_name:1400(假设新端口号为 1400)
以下的方法你每种的去试试:
#检查一下sql server的connection有没有full.
#如果是认证的问题.
可到sql enterprice manager->指定server->内容->安全性.
把验证改为 SQL server 及 windows.
#点选属性检查一下port是否正确.
#执行%MSSQL_HOME%80ToolsBinnSVRNETCN.exe
把TCP/IP启用.
#关掉防火墙.
#把SQL server update到sp3:
http://www.microsoft.com/sql/downloads/2000/sp3.asp
经我验证,一般升级到sp3就好用了