当前位置: 代码迷 >> SQL >> Tomcat Sql Server2005 连接池折腾初记
  详细解决方案

Tomcat Sql Server2005 连接池折腾初记

热度:40   发布时间:2016-05-05 12:58:11.0
Tomcat Sql Server2005 连接池折腾小记
    最近把一个老项目下载下来,想把系统搭建下来看看原来写的东西,数据库使用的是mssql(对其熟悉不如oracle,正因为如此,才想折腾!),然后把对应的数据库也导出出来了(sql server 2000),导入本机的sql server 2005数据库:现在开源连接池那么多,tomcat已经不怎么使用了,但是我就是想折腾一下。

    一、小报一个错:报备份集中的数据库备份与现有的数据库不同的错误.解决方法:还原时设置:选项 -->还原选项 -->覆盖现有数据库 --> 确定,通过了。

    二、一开始有点sb式的把sql server2000的jdbc驱动包(msbase.jar、msutil.jar、mssqlserver.jar)拷进tomcat/lib下,当然不行:
报错:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)


    三、删掉mssqlserver.jar,换成个貌似是2005版本的包也叫mssqlserver.jar(从另一个正使用的2005版数据库的系统中找到的),然后修改下tomcat下comtext.xml的Resource配置,报错:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sqlserver.SQLServerDDriver

找不到驱动了?后来才明白应该是driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"中的顺序不对,应该根据jar的目录结构来定。
注意:在SQL SERVER 2005中连接项与SQL SERVER 2000不同:sqlserver与jdbc先后不一样。

    四、一会报这错,一会报那错,我对comtext.xml的Resource配置没信心,对jar引入是否正确没信心,都迟怀疑态度,遇到报错就急着改,急着要搞定,所以两手抓:改Resource配置 + 换jar包,没有严密的解决方法的逻辑性。这次换成了个sqljdbc4.jar包,重启:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (The TCP/IP connection to the host localhost, port 1433 has failed. Error: Connection refused: connect. Please verify the connection properties and check that a SQL Server instance is running on the host and accepting TCP/IP connections at the port, and that no firewall is blocking TCP connections to the port.)

其实回头想想:这次报错够明显的了,离终点算是最近了,可我还是没引起重视,走绕行了。

    五、朝上面这个错误解决,应该能最明显最快了,可是这个时候同事搞的测试,马上成功的,我觉得他的那个简单获取connection的测试页面---这种方式挺好的,移植到我这来,不行!
我们访问的是不同的数据库(我访问的是本机,他访问的是某服务器),则改成服务器数据库,通过了,可获取链接!shit,我的数据库有问题!
测试页面:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ page import="javax.naming.Context"%><%@ page import="javax.naming.InitialContext"%><%@ page import="javax.sql.DataSource"%><%@ page import="java.sql.Connection"%><%    Context ctx = new InitialContext();    String strLookup = "java:comp/env/test";    DataSource ds = (DataSource) ctx.lookup(strLookup);    Connection con = ds.getConnection();    if (con != null) {        out.print("拿到链接了");    } else {        out.print("失败了");    }%>

然后小google一下,发现sql server这些版本还需要打补丁,于是sb的去下补丁,然后安装重启机子,依然不可以!

    六、竟然操蛋的发现是 我的mssql 是 express版本,只限制为本地连接,连1433端口服务都没有打开也没有地方可以打开,:s_h_i_t。又去找解决方法;
查看SQL Server Express 2005 网络配置信息(SQL Server 2005 Network Configuration――> Protocols for SQLEXPRESS)。默认的情况下右边列表中的Named Pipes和TCP/IP的状态为Disable,即没有启用。右键点击这两项,在弹出菜单中选中Enable启用这两个协议;在TCP/IP协议上双击鼠标,弹出对话框。修改对话框Protocol属性页中的“Listen All ”项设为“no”。IP Address属性页中,修改你要数据库服务监听的IP地址的属性,修改Enabled属性为Yes,修改TCP Dynamic Ports属性为空,TCP Port项在默认安装下为空,现在修改为我们监听端口1433。
查看连接:netstat -an 或 netstat -p tcp,发现1433终于有了。

    七、重启sqlserver服务一下。测试tomcat连接池,貌似能从tomcat的连接池获取连接成功了。但是还是不能连接上数据库、不能并登入系统。caodan!
报错:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确,参数 1 (""): 数据类型 0x38 未知。这个时候把mssqlserver.jar 换成 sqljdbc.jar ,修改下参数顺序为:driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
重启,依然不行,TMD,换成sqljdbc4.jar,重启,登陆系统成功。TMD,真够折腾的。

PS:看着好乱吧,凌乱不堪啊,发现自己解决问题过于急于求成,过于急躁,一口气想搞定,但是有些基础知识又不扎实,造成手忙脚乱的喜欢瞎折腾。经过这个经历,发现平时真应该认真整理整理自己的思路,和解决问题的逻辑方法,先后顺序,一步一步来,不能一口吃下一个胖子的,不能为了解决问题而解决,解决完事了也就完事了,这样一来,下次遇到问题,依然会是手忙脚乱急于求成,欲速则不达!

形成各初步解决问题的思路吧:获取基础知识--->修改测试--->有问题--->修改、将出现问题的范围变小进行排除--->不断缩小直到真相现形!


20110608 ADD:
tomcat 连接 sql server2005时:

不能拿到connection,报错信息:cannot create jdbc driver of class “某某某” for connect url “某某某”:

改正: 将context.xml文件中Resource配置的:
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=某数据库;SelectMethod=Cursor"
改成:
url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=某数据库;SelectMethod=Cursor"
(数据库版本:Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Express Edition with Advanced Services on Windows NT 5.1 (Build 2600: Service Pack 3) ,未打sp4补丁)

若是报错:cannot create jdbc driver of class “某某某” for connect url “null”,那就可能需要打sp4补丁了。





  相关解决方案