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