数据库连接的建立和关闭是非常耗费系统资源的 *** 作。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请、使用和释放。对于多余连接池中的连接数的请求,应在请求队列中排队等待。并且应用程序会根据连接的使用率动态的增加和减少池中的连接数。
连接池技术尽可能多的重用了消耗内存的资源,大大节省了内存,提高了服务器的效率。
不同的版本的tomcat创建连接池的方法是不同的。下面基于tomcat5.5 + MS sql server 2k来说明。
step1:数据库驱动(三个jar)放到$tomcat$/common/lib中。
step2:打开$tomcat$/conf/server.xml,在host下加入如下代码
以下是引用片段:
<Context path="" docBase="D:\myelipseJsp\dsideal\WebRoot" reloadable="true">
<Resource
name="jdbc/xxx"
type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433DatabaseName=database"
maxActive="300"
maxIdle="100"
maxWait="5000"
removeAbandoned="true"
removeAbandonedTimeout="100"
logAbandoned="true"
/>
</Context>
注:在tomcat6.0下,需要在Resource中加入一句auth="Container"即可。
maxActive是最大激活连接数,这里取值为300,表示同时最多有300个数据库连接。
maxIdle是最大的空闲连接数,这里取值为100,表示即使没有数据库连接时依然可以保持100空闲的连接,而不被清除,随时处于待命状态。
MaxWait是最大等待秒钟数,这里取值5000,表示5秒后超时,也可取值-1,表示无限等待,直到超时为止。
removeAbandoned="true"
removeAbandonedTimeout="100"
logAbandoned="true"
以上三句话也需要加入,其主要作用在于当并发用户超过预定的连接后会有一些连接因为等待而失效,要及时回收这些无效链接。100表示100秒。
在connpool.jsp中使用。
以下是引用片段:
<%@ page contentType="text/htmlcharset=utf-8" language="java" errorPage="" %>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Context ctx = new InitialContext()
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx")
Connection conn = ds.getConnection()
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
String sql="select * from news"
ResultSet rs=stmt.executeQuery(sql)
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%><br>
<%}%>
<%out.print("数据库 *** 作成功,恭喜你")%>
<%rs.close()
stmt.close()
conn.close()
%>
注意两段代码中的jdbc/xxx为连接池的名字,要保持一致。
当然我们也可以将连接封装起来,作为一个类使用。结合我们以前所讲的dataconn.java,这里我将它们合并为一个类。代码如下:
以下是引用片段:
package dataconn
import java.sql.*
import javax.naming.*
import javax.sql.DataSource
public class dataconn{
ResultSet rs = null
Connection conn=null
Statement stmt=null
//连接池
public static synchronized Connection getConnection() throws Exception
{
try
{
Context initCtx = new javax.naming.InitialContext()
Context envCtx = (Context) initCtx.lookup("java:comp/env")
DataSource ds = (DataSource)envCtx.lookup("jdbc/xxx")
return ds.getConnection()
}
catch(SQLException e)
{
throw e
}
catch(NamingException e)
{
throw e
}
}
//更新数据
public void executeUpdate(String sql) {
try {
conn = getConnection()
}
catch (Exception ex) {
ex.printStackTrace()
}
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
stmt.executeUpdate(sql)
}
catch(SQLException ex) {
System.err.println("aq.executeUpdate: " + ex.getMessage())
System.err.println("aq.executeUpadatestrSQL: " + sql)
}
}
//查询数据
public ResultSet executeQuery(String sql) {
rs = null
try {
conn = getConnection()
}
catch (Exception ex) {
ex.printStackTrace()
}
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
rs = stmt.executeQuery(sql)
}
catch(SQLException ex) {
System.err.println("aq.executeQuery: " + ex.getMessage())
System.err.println("aq.executeQuerystrSQL: " + sql)
}
return rs
}
public void closeStmt()
{
try{
if(stmt!=null){
stmt.close()
}
}
catch(SQLException e){
e.printStackTrace()
}
}
public void closeConn()
{
try{
if (conn!=null){
conn.close()
}
}
catch(SQLException e){
e.printStackTrace()
}
}
}
此外你要保证你的sqlserver数据库是好用的才行,用这个测试一下
<%@ page contentType="text/htmlcharset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance()
String url="jdbc:microsoft:sqlserver://localhost:1433DatabaseName=data_2007"
String user="sa"
String password="sa"
Connection conn= DriverManager.getConnection(url,user,password)
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)
String sql="select * from userlist"
ResultSet rs=stmt.executeQuery(sql)
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%><br>
您的第二个字段内容为:<%=rs.getString(2)%><br>
您的第三个字段内容为:<%=rs.getString(3)%><br>
<%}%>
<%out.print("数据库 *** 作成功,恭喜你")%>
<%rs.close()
stmt.close()
conn.close()
%>
将上面代码另存为.jsp,注意修改数据库名,用户名和密码,即可测试sql server是否安装成功。
url="jdbc:mysql://localhost:3306/cr21"/>改为url="jdbc:mysql://localhost:3306/数据库的名字"/>并在cmd中输入netstat -ano查看端口占用情况,查看是否有被占用的3306端口,若没有则把 localhost端口该成占用着的端口,若有占用的端口为3307,则改为url="jdbc:mysql://localhost:3307/数据库的名字"/>
供以后查找这个问题的人方便
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)