Tomcat6.0 sqlServer2000 配置连接池操作

一. 准备工作:

1) 安装tomcat6.0,SqlServer2000(本机个人版,需要升级到SP3) 

2) SqlServer2000的连接驱动,即3个jar包:msutil.jar,msbase.jar,mssqlserver.jar 将此Jar包放入tomcat的安装目录的lib下.  

3) 剩下的3个连接池jar包不知是否需要有待实验,但是本地也放在了lib下:commons-collections-3.1.jar, commons-dbcp-1.2.1.jar,commons-pool-1.2.jar

 

二. 编辑tomcat安装目录下的context.xml

如下所示:

<?xml version='1.0' encoding='utf-8'?>

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/MBlog"
auth="Container"                 
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"      // 复制后需要更改
password="sa"       //复制后需要更改
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://10.0.0.155:1433;DatebaseName=MBlog"/>       //复制后需要更改IP地址和端口号 一般默认的是1433

</Context>

三. 编写工程中WEB-INF下的web.xml文件,加入如下资源:

  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/MBlog</res-ref-name> 
      <res-type>javax.sql.DataSource </res-type>
     <res-auth>Container </res-auth>
  </resource-ref>

 

四. 编写连接池的JAVA工具类

import java.sql.Connection;

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

public class DatabaseConn { 

private static DataSource ds = null;
 public static DataSource getDataSource()

throws Exception{
  long start = System.currentTimeMillis();
  if (ds == null) {
       Context initContext = new InitialContext(); //初始化
             if (initContext == null) 
             throw new Exception("No Context");
             Context envContext = (Context) initContext.lookup("java:/comp/env");
             ds = (DataSource) envContext.lookup("jdbc/MBlog"); //需要与context里的目录一致
             long end = System.currentTimeMillis();
             System.out.println(end-start);             //测试连接数据库时间
  }
       return ds;
 }
    public static Connection getConnection() {

        try { 
                Connection conn = getDataSource().getConnection();         
                if (conn != null) {
                    return conn;
                } 
}

catch (Exception e)

       {

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

 

五. 测试和使用连接池

         Connection conn = DatabaseConn.getConnection(); //从工具类获取连接
         if(conn == null){
             System.out.println("连接不成功"); 
            }
            else{
             System.out.println("连接成功");
            }
         Statement stm = conn.createStatement();
      ResultSet result=stm.executeQuery("sql语句)");

 

六. 出现问题总结:

1) sql语句中出现的表名显示为:对象名无效

这个问题还是很诡异的,师兄配置的就没有问题,不知道是不是我的数据库的角色权限之类的没有很好的配置。

 

解决问题方法:

打开企业管理器 选择“安全”->“登陆”->sa的属性 将它的默认管理的数据库由master改为MBlog,问题解决。

 

 

2) 连接释放问题

此程序始终没有释放连接,是一个很大的隐患

七. 一点感想

      我的数据库与服务器不在一个机器里,我访问远处数据库时候非常的慢,获得一次连接大致需要4秒到5秒的时间,开始以为是没有配置连接池的原因,后来发现建立完连接池之后,连接速度没有很大的改观,建议数据库与服务器放在同一个机器上。

 

测试代码:

long start = System.currentTimeMillis();

...

long end = System.currentTimeMillis();

System.out.println(end-start);

输出某一段代码的执行时间

 

解决获取中文参数乱码问题:

String ?= new String(request.getParameter("?").trim().getBytes("ISO-8859-1"));

 

断点测试:

1. debug界面

2. 选择程序断点

3. f6单步调试 varibles表里查看变量的值,各种值,搞定

 

某些常用全局查询:

select @@connections   --返回自上次启动 Microsoft? SQL Server? 以来连接或试图连接的次数。

select @@error    --返回最后执行的 Transact-SQL 语句的错误代码。

select @@version   --返回 Microsoft? SQL Server? 当前安装的日期、版本和处理器类型。

select @@max_connections --返回 Microsoft? SQL Server? 上允许的同时用户连接的最大数。返回的数不必为当前配置的数值。

select @@trancount   --返回当前连接的活动事务数。

select @@timeticks   --返回一刻度的微秒数。

select @@rowcount   --返回受上一语句影响的行数。

select @@servicename   --返回 Microsoft? SQL Server? 正在其下运行的注册表键名。
     --若当前实例为默认实例,则 @@SERVICENAME 返回 MSSQLServer;若当前实例是命名实例,则该函数返回实例名。

select @@spid    --返回当前用户进程的服务器进程标识符 (ID)。

select @@servername             --返回运行 Microsoft? SQL Server? 的本地服务器名称。

posted @ 2010-03-30 20:55  樱色布  阅读(758)  评论(0编辑  收藏  举报