Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)错误

Eclipse下配置及使用Tomcat 6.0数据库连接池连接sqlserver2000
前提假设Eclipse已经设置成功,Tomcat插件也设置成功。

1.由于tomcat6运行web应用时是在eclipse的workspace下建立一个server工程,而不是把web工程拷贝到tomcat路径下运行,所以在eclipse运行tomcat、使用它的连接池需要更改的是eclipse的workspace下server工程里面的server.xml配置,将来发布后再更改tomcat安装路径下conf下的server.xml。
在server.xml的host下加入:

<
Resource  name ="jdbc/DBUtil"  auth ="Container"  type ="javax.sql.DataSource"
               maxActive
="100"  maxIdle ="30"  maxWait ="10000"
               username
="sa"  password ="1234"  driverClassName ="com.microsoft.jdbc.sqlserver.SQLServerDriver"
               url
="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JiLv"   />

其中,DBUtil任意,将来和下一步的web.xml里名字对应即可,url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JiLv"按情况填写。
   此步骤可以用如下方法替代,在web工程的webcontent/web-inf目录下建立context.xml文件,这样避免两次去更改server.xml配置,也可使不同工程使用不同context配置,这是tomcat6提倡的方法,内容如下:
< Context  docBase ="MyStruts"  path ="/MyStruts"  reloadable ="true" >

< WatchedResource > WEB-INF/web.xml WatchedResource >

< Resource  name ="jdbc/DBUtil"  auth ="Container"  type ="javax.sql.DataSource"
               maxActive
="100"  maxIdle ="30"  maxWait ="10000"
               username
="sa"  password ="1234"  driverClassName ="com.microsoft.jdbc.sqlserver.SQLServerDriver"
               url
="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=JiLv"   />
Context >

2.在webapps/项目名/WEB-INF中的web.xml中之前增加以下配置:
< resource-ref >
        
< description > SQL Server Datasource description >
        
< res-ref-name > jdbc/DBUtil res-ref-name >
        
< res-type > javax.sql.DataSource res-type >
        
< res-auth > Container res-auth >
resource-ref >

3.把以下几个.jar文件复制到tomcat安装目录下的lib文件夹中
      commons-collections-3.1.jar
      commons-dbcp-1.2.1.jar
      commons-pool-1.2.jar
      msutil.jar
      msbase.jar
      mssqlserver.jar

4.关键一步。确认sqlserver2000可以远程连接,这除了开放1433端口外还要,升级数据库到sp3或者sp4,否则连接会发出SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket错误。

5.编写java类,用于返回connection对象。
package  com.lyb;

import  java.sql.Connection;

import  javax.naming.Context;
import  javax.naming.InitialContext;
import  javax.sql.DataSource;

public   class  DBUtil {

    
public   static  Connection getConnection() {

        
try  {
            Context initContext 
=   new  InitialContext();
            
if  (initContext  ==   null )
                
throw   new  Exception( " No Context " );
            Context envContext 
=  (Context) initContext.lookup( " java:/comp/env " );
            DataSource ds 
=  (DataSource) envContext.lookup( " jdbc/DBUtil " );
            
if  (ds  !=   null ) {
                Connection conn 
=  ds.getConnection();
                
if  (conn  !=   null ) {
                    
return  conn;
                }
            }
        } 
catch  (Exception e) {

            e.printStackTrace();
        }
        
return   null ;
    }
}

6.测试。
jsp文件内容:(注意不能用main函数测试,这样就脱离了Tomcat环境,只是一个java 应用,不可能使用tomcat连接池方法)
<% @   page contentType = " text/html;charset=gb2312 " %>
<% @   page import = " java.sql.* " %>
<% @   page import = " javax.sql.* " %>
<% @   page import = " javax.naming.* " %>
<% @   page import = " com.lyb.* " %>

< HTML >
< HEAD >
< TITLE > JSP测试页面 TITLE >
HEAD >
< BODY >
<%
    Connection conn 
=  DBUtil.getConnection();
    Statement st 
=  conn.createStatement();
    
String  sql  =   " select   *   from   goods " ;
    ResultSet rs 
=  st.executeQuery(sql);
    
while  (rs.next()) {
%>
第一个字段内容为:
<% = rs.getString( 1 ) %>
第二个字段内容为:
<% = rs.getString( 2 ) %>
< br >
<%
    }
%>
<%
    out.print(
" 使用jdbc驱动操作数据库操作成功 " );
%>
<%
    rs.close();
    st.close();
    conn.close();
%>
BODY >
HTML >

这篇说明是来自:http://skywind.suprglu.com/

 主要是数据库的升级问题.

你可能感兴趣的:(java开发历程,sqlserver,microsoft,jdbc,tomcat,eclipse,数据库连接池)