JDBC連線池技術
阿新 • • 發佈:2019-02-17
一.連線池技術
(1)Java語言通過JDBC技術訪問資料庫的基本過程是:1.載入資料庫驅動程式;
2.通過JDBC建立資料庫連線;
3.訪問資料庫,執行SQL語句;
4.斷開資料庫連線。 (2)在Web應用程式開發中,使用這種模式訪問資料庫時,存在很多問題,為了解決這些問題,可以採用資料庫連線池技術。 連線池實際上是在一個集合物件中儲存一定數量的資料庫連線物件。當程式需要使用資料庫連線時,請求從池中獲取一個空閒的連線, 程式使用完畢後再把連線放回池中重用。連線池通過重用連線的方法,減少了建立連線的系統開銷,能夠明顯提高系統的資料庫訪問效率。 (3)為解決上述問題可以使用連線池技術,連線池實際上是一個集合物件中儲存一定數量的資料庫連線物件。 (4)在JSP技術中,一般是通過資料來源來使用連線池,一個數據物件會被註冊為web伺服器的一個JNDI資源, 應使用程式通過JDNI獲取資料來源物件,再通過資料來源物件取得資料庫連線,連線池為資料來源提供物理連線。
二.使用方法
(2)應用程式通過資料來源取得資料庫連線的基本過程是:利用上下文物件,根據JNDI名取得一個數據源物件,通過資料來源物件取得一個連線。 (3)JNDI的全稱是Java命名和目錄介面(java naming and directory interface)他是sun公司提供的java命名和目錄訪問介面。 主要方法如下: 1.javax.naming.Context 這個方法提供的lookup方法能在JNDI上下文中查詢一個命名物件,返回一個object物件 2.javax.naming.InitialContext 3.javax.sql.DtaSource 資料來源是一個和物理連雞翅相關聯的工廠類Factory 偉世通Datasource物件,必須為之指定連線池,連線池為JNDI資料來源提供物理連線;
三.例項分析
第1步:定義連線池和資料來源。用文字編輯器開啟c:\tomcat\conf\context.xml檔案,在<Context></Context>元素內部新增配置程式碼(內容上述有介紹省去)
第2步:新建JSP頁面,用連線池方式訪問pubs/titles表500次。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>無標題文件</title> </head> <body> <%@page import="javax.sql.*,javax.naming.*"%> <% long beginTime=System.currentTimeMillis(); int n=500; ResultSet rs=null; Statement st=null; Connection con=null; for(int i=0;i<n;i++) { try { Context ctx=new InitialContext(); //獲得一個上下文物件 DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/pubs"); //通過上下文物件在JNDI中查詢指定名字的資料來源 con=ds.getConnection();//通過資料來源獲得一個連線池 String sql="select title,type,price from titles "; st=con.createStatement(); rs=st.executeQuery(sql); while(rs.next()) { rs.getString("title"); rs.getString("type"); rs.getString("price"); } } catch(Exception e) { out.print(e.getMessage()); } finally { if(rs!=null) rs.close(); if(st!=null) st.close(); if(con!=null) con.close(); } } long endTime=System.currentTimeMillis(); out.print("用連線池作500次查詢耗時:"+(endTime-beginTime)+"毫秒"); %> </body> </html>
第3步:新建一個名為exam623.jsp 的JSP頁面,用JDBC驅動程式直接訪問pubs/titles表500次。
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文件</title>
</head>
<body>
<%@page import="javax.sql.*,javax.naming.*"%>
<%
long beginTime=System.currentTimeMillis();
int n=500;
ResultSet rs=null;
Statement st=null;
Connection con=null;
for(int i=0;i<n;i++)
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://localhost:1433;databaseName=pubs;user=sa;password=";
con = DriverManager.getConnection(url);
String sql="select title,type,price from titles ";
st=con.createStatement();
rs=st.executeQuery(sql);
while(rs.next())
{
rs.getString("title");
rs.getString("type");
rs.getString("price");
}
rs.close();
st.close();
con.close();
}
catch(Exception e)
{
out.print(e.getMessage());
}
finally
{
if(rs!=null)
rs.close();
if(st!=null)
st.close();
if(con!=null)
con.close();
}
}
long endTime=System.currentTimeMillis();
out.print("直接用JDBC連線作500次查詢耗時:"+(endTime-beginTime)+"毫秒");
%>
</body>
</html>
(2)這個不用多數,效果看得見! 注:希望大家在轉載的時候註明出去!