• 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? 的本地服务器名称。

  • 相关阅读:
    成功交付离岸项目
    利用CSP探测网站登陆状态
    Web NFC API
    HTML/W3C-WHATWG-Differences
    MIT教授将网页开发整合为完整独立的程式语言Ur/Web
    移动端前端开发调试
    从0到100——知乎架构变迁史
    C++之再续前缘(一)——C++基础(与C语言的差异)(上)
    又爱又恨系列之枚举enum
    数据结构之队列(三)——循环队列
  • 原文地址:https://www.cnblogs.com/cherri/p/1700887.html
Copyright © 2020-2023  润新知