❶ java中建立資料庫連接池,有哪幾個步驟
配置包括3步:1.讓tomcat容器啟動創建資料庫連接池2.在某個項目中關聯資料庫連接池,3.取得資料庫連接池並使用。使用包括,當拿到資料庫連接後,可以通過2種方式來使用,1.使用jstl的標簽,2.封裝成返回connection的方法。
1.讓tomcat容器啟動創建資料庫連接池:
配置的地方很多,根據不同的需求配置在不同的位置,但原理就一個,就是要配置一個Context標簽下有一個resource標簽。
a.在Tomcat 6.0\conf\Catalina\localhost目錄下新建一個跟項目名一樣的*.xml文件
b.數據源設置的名字(JNDI) auth:表示數據源由誰管理,這兒是tomcat容器本身 type:類型
c.驅動設置,該驅動放在tomcat的lib下或者放在該站點的lib下設置連接資料庫字元串,url設置連接資料庫的用戶名設置資料庫連接的密碼-->
2.在某個項目中關聯資料庫連接池,在web.xml添加代碼:
<!--關聯jndi資料庫連接池 -->
3.使用jstl標簽測試數據源是否配置成功
4.在jsp中通過java代碼測試:
5.封裝成bean對外提供得到資料庫連接池連接的方式:
❷ 如何在Java代理中使用JDBC的連接池
/**
13 * 使用代理創建連接池
14 * @author ASUS
15 *
16 */
17 public class ProxyConnUtils {
18
19 private static LinkedList<Connection> pool = new LinkedList<>();
20 private static String url;
21 private static String user;
22 private static String password;
23 private static String driverClass;
24 //private static Connection conn;
25 static{
26 try {
27 Properties properties = new Properties();
28 InputStream in = ProxyConnUtils.class.getResourceAsStream("/db.properties");
29 properties.load(in);
30 url = properties.getProperty("url");
31 System.err.println(url);
32 user = properties.getProperty("user");
33 password = properties.getProperty("password");
34 driverClass = properties.getProperty("driverClass");
35 Class.forName(driverClass);
36 for(int i = 0;i<3;i++){
37 final Connection conn = DriverManager.getConnection(url, user, password);
38 //對connection做代理
39 Object connProxy = Proxy.newProxyInstance(ProxyConnUtils.class.getClassLoader(),
40 new Class[]{Connection.class},
41 new InvocationHandler() {
42
43 @Override
44 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
45 //判斷是否是close方法 回收連接
46 if(method.getName().equals("close")){
47 synchronized (pool) {
48 System.err.println("不能關閉");
49 pool.addLast((Connection) proxy);
50 pool.notify();
51 return null;
52 }
53 }else{
54 //若果調用的不是close方法 直接放行
55 return method.invoke(conn, args);
56 }
57 }
58 });
59 // 將代理對象添加到池中去
60 pool.add((Connection) connProxy);
61 }
62 } catch (Exception e) {
63 e.printStackTrace();
64 throw new RuntimeException(e);
65 }
66 }
67
68 //獲取connection連接
69 public static Connection getConnection(){
70 synchronized (pool) {
71 if(pool.size() == 0){
72 try {
73 pool.wait();
74 } catch (Exception e) {
75 e.printStackTrace();
76 throw new RuntimeException(e);
77 }
78 }
79 Connection connection = pool.removeFirst();
80 return connection;
81 }
82 }
83 }
❸ jdbc連接資料庫的幾個步驟
創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
❹ hadoop怎麼用java jdbc連接池
連接池只是管理一堆的 "連接 ",而不是管理怎麼樣去連接
,像odbc,jdbc說的只是如何與資料庫連接.連接管理 "連接 ",
並不是每次要與資料庫連接就創建一次伺服器去數據的連接,
而是從連接 "池 "里取一個連接出來,用完後就放回連接池裡,這個連接差沒有
❺ jdbc連接資料庫步驟都有哪些
JDBC連接資料庫
•創建一個以JDBC連接資料庫的程序,包含7個步驟:
1、載入JDBC驅動程序:
在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),
這通過java.lang.Class類的靜態方法forName(String className)實現。
例如:
try{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驅動程序類 ,載入驅動失敗!");
e.printStackTrace() ;
}
成功載入後,會將Driver類的實例注冊到DriverManager類中。
2、提供JDBC連接的URL
•連接URL定義了連接資料庫時的協議、子協議、數據源標識。
•書寫形式:協議:子協議:數據源標識
協議:在JDBC中總是以jdbc開始
子協議:是橋連接的驅動程序或是資料庫管理系統名稱。
數據源標識:標記找到資料庫來源的地址與連接埠。
例如:(MySql的連接URL)
jdbc:mysql:
//localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為
gb2312或GBK,本參數必須設置為true 。characterEncoding=gbk:字元編碼方式。
3、創建資料庫的連接
•要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,
該對象就代表一個資料庫的連接。
•使用DriverManager的getConnectin(String url , String username ,
String password )方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和
密碼來獲得。
例如:
//連接MySql資料庫,用戶名和密碼都是root
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
try{
Connection con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("資料庫連接失敗!");
se.printStackTrace() ;
}
4、創建一個Statement
•要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3
種類型:
1、執行靜態SQL語句。通常通過Statement實例實現。
2、執行動態SQL語句。通常通過PreparedStatement實例實現。
3、執行資料庫存儲過程。通常通過CallableStatement實例實現。
具體的實現方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall("{CALL demoSp(? , ?)}") ;
5、執行SQL語句
Statement介面提供了三種執行SQL語句的方法:executeQuery 、executeUpdate
和execute
1、ResultSet executeQuery(String sqlString):執行查詢資料庫的SQL語句
,返回一個結果集(ResultSet)對象。
2、int executeUpdate(String sqlString):用於執行INSERT、UPDATE或
DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的
語句。
具體實現的代碼:
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
6、處理結果
兩種情況:
1、執行更新返回的是本次操作影響到的記錄數。
2、執行查詢返回的結果是一個ResultSet對象。
• ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些
行中數據的訪問。
• 使用結果集(ResultSet)對象的訪問方法獲取數據:
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比較高效
}
(列是從左到右編號的,並且從列1開始)
7、關閉JDBC對象
操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲
明順序相反:
1、關閉記錄集
2、關閉聲明
3、關閉連接對象
if(rs != null){ // 關閉記錄集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 關閉聲明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 關閉連接對象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
❻ 如何創建jdbc鏈接池,怎樣的鏈接池才是好的連接池
要創建資料庫連接池: (1)你必須有資料庫連接池的實現,使用比較多的是dbcp,這是apache的開源項目。(當然你也可以自己實現) (2)資料庫連接信息(用戶名稱和密碼、資料庫、測試方法、必要的其他選項等等)(3)連接池的連接使用完後,一定要還給連接池
❼ JDBC連接池配置及域的配置
1.新建一個 .xml 文件,內容如下所示
[提示] 此xml文件名可以自己定,寫好後放置到%TOMCAT_HOME%\con\conf\Catalina目錄下即可
(* 其中myapp是目錄是建立在%tomcat%/webapps/目錄下的)
[「JDBC/Server2000」即連接池的名字可以由自己設定,不過該設置要保持一致]
<Context path="/myapp" docBase="myapp" debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/>
<Resource name="JDBC/Server2000" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="JDBC/Server2000">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=project</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>kkf</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
</ResourceParams>
</Context>
❽ 如何用jdbc實現連接池
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
❾ 如何實現連接池
要實現連接池,一般要首先在web伺服器上配置一個數據源dataSource,這個數據源中對資料庫連接池連接的資料庫、資料庫連接驅動、連接池中最大的連接數、開始默認的連接數等各項進行設置,這樣配置好以後我們就可以在項目中通過此數據源的名字進行調用。
在項目中調用連接池時,要讓我們的項目跟數據源進行關聯,就要在web.xml中對數據源進行注冊,然後在我們的代碼中就可以調用了,在調用時基於JNDI(java命名服務)來獲取數據源,也就是通過查找我們配置的數據源名稱找到我們配置好的數據源,數據源就能為我們提供它所表示的物理數據源的連接。
❿ 如何在tomcat裡面配置jdbc連接池
一、連接池配置<bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
<property name="url" value="${jdbcUrl}"/>
<!--資料庫驅動-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<!--用戶名-->
<property name="username" value="mysql"/>
<!--密碼-->
<property name="password" value="123456"/>
<!--注冊池JMX,默認:true-->
<property name="jmxEnabled" value="false"/>
<!--檢查連接死活的時間間隔,單位:毫秒-->
<property name="validationInterval" value="30000"/>
<!--指定連接進入空閑狀態時是否經過空閑對象驅逐進程的校驗,如果校驗未通過,則該連接被連接池斷掉
值為true,則validationQuery參數必須為一個非空字串---->
<property name="testWhileIdle" value="false"/>
<!--指定連接返回到池中是時是否經過校驗
值為true,則validationQuery參數必須為一個非空字串---->
<property name="testOnReturn" value="false"/>
<!--指定連接被調用時是否經過校驗,如果校驗未通過,則該連接被連接池斷掉,並由連接池嘗試調用另一個連接
值為true,則validationQuery參數必須為一個非空字串-->
<property name="testOnBorrow" value="true"/>
<!--在連接返回給調用者前用於校驗連接是否有效的SQL語句,如果指定了SQL語句,則必須為一個SELECT語句,且至少有一行結果-->
<property name="validationQuery" value="select 1"/>
<!--連接池處於活動狀態的資料庫連接的最大數目,0表示不限制,表示最大並發-->
<property name="maxActive" value="1000"/>
<!--初始化連接數-->
<property name="initialSize" value="10"/>
<!--連接池中連接用完時,新的請求的等待時間(即等待別的連接空閑),超時返回異常,毫秒-->
<property name="maxWait" value="100000"/>
<!--以毫秒錶示空閑對象驅逐進程由休眠狀態進入運行狀態的數值,值為非正整時表示不運行任何空閑對象驅逐進程
運行判斷連接超時任務的時間間隔-->
<property name="timeBetweenEvictionRunsMillis" value="30000"/>
<!--以毫秒錶示連接被空閑對象驅逐進程驅逐前在池中保持空閑狀態的最小時間,連接的超時時間,默認為半小時-->
<property name="minEvictableIdleTimeMillis" value="30000"/>
<!--連接池檢查每個空閑對象驅逐進程的對象數量
<property name="numTestPerEvictionRun" value="3"/>
-->
<!--連接池處於空閑狀態的資料庫連接的最小數目,低於此數值將會創建所欠缺的連接,設0無限制-->
<property name="minIdle" value="10"/>
<!--連接池處於空閑狀態的資料庫連接的最大數目,取非正整數表示不受限制,超過此數值時多餘的空閑連接將會被釋放-->
<property name="maxIdle" value="200"/>
<!--當清除無效連接時是否在日誌中記錄清除信息的標志-->
<property name="logAbandoned" value="false"/>
<!--是否清除已經超過 removeAbandonedTimeout 設置的無效連接,自動回收超時連接
啟動機制:getNumActive() > getMaxActive() - 3 和 getNumIdle() < 2
假設maxActive=20,而當前18個活動連接,1個空閑連接,機制將會啟動
但是只有在活動連接沒有使用的時長超過「removeAbandonedTimeout」(默認300秒),的連接將被清除-->
<property name="removeAbandoned" value="true"/>
<!--以秒錶示清除無效連接的時限,自我中斷時間,單位秒-->
<property name="removeAbandonedTimeout" value="60"/>
<!--設置攔截器,默認為空
ConnectionState:跟蹤自動提交,只讀目錄和事務隔離級別
StatementFinalizer:跟蹤打開的語句,並關閉連接時的返回到池中
-->
<property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/>
</bean>