尚硅谷之JDBC
方式一:
示例代碼:
步驟:
1、加入兩個jar
DBCP數據庫連接池的的jar:Commons-dbcp.jar
連接池實現的依賴庫:Commons-pool.jar,如果不加這個,運行報如下異常
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory at com.jdbc.datasource.TestDBCP.main(TestDBCP.java:14) Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.KeyedObjectPoolFactory at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more |
2、編寫代碼
package com.jdbc.datasource; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class TestDBCP { public static void main(String[] args) throws SQLException { //1.創建DBCP數據源(即連接池) BasicDataSource ds = new BasicDataSource(); //2.設置數據源的必須屬性 ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/test"); ds.setUsername("root"); ds.setPassword("root"); //3.設置數據源的可選屬性 //(1)指定數據庫連接池中初始化連接數的個數 ds.setInitialSize(10); //(2)指定最大的連接數: 同一時刻可以同時向數據庫申請的連接數 ds.setMaxActive(50); //(3)在數據庫連接池中保存的最少的空閑連接的數量 ds.setMinIdle(2); //(4)等待數據庫連接池分配連接的最長時間. 單位為毫秒. 超出該時間將拋出異常. ds.setMaxWait(1000*5); //4.從數據源中獲取數據庫連接 Connection conn = ds.getConnection(); System.out.println(conn); } } |
測試超過連接數
package com.jdbc.datasource; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class TestDBCP2 { public static void main(String[] args) throws SQLException { //1.創建DBCP數據源(即連接池) BasicDataSource ds = new BasicDataSource(); //2.設置數據源的必須屬性 ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/test"); ds.setUsername("root"); ds.setPassword("root"); //3.設置數據源的可選屬性 //(1)指定數據庫連接池中初始化連接數的個數 ds.setInitialSize(3); //(2)指定最大的連接數: 同一時刻可以同時向數據庫申請的連接數 ds.setMaxActive(5); //(3)指定最小活躍的連接數: 在數據庫連接池中保存的最少的空閑連接的數量 ds.setMinIdle(2); //(4)等待數據庫連接池分配連接的最長時間. 單位為毫秒. 超出該時間將拋出異常. ds.setMaxWait(1000*5); //4.從數據源中獲取數據庫連接 for(int i=0;i<6;i++){ Connection conn = ds.getConnection(); System.out.println("獲取第"+(i+1)+"個"+conn); //這里沒有關閉,即沒有放回連接池 } } } |
測試如果連接重復使用
package com.jdbc.datasource; import java.sql.Connection; import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; public class TestDBCP3 { public static void main(String[] args) throws SQLException { //1.創建DBCP數據源(即連接池) BasicDataSource ds = new BasicDataSource(); //2.設置數據源的必須屬性 ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/test"); ds.setUsername("root"); ds.setPassword("root"); //3.設置數據源的可選屬性 //(1)指定數據庫連接池中初始化連接數的個數 ds.setInitialSize(3); //(2)指定最大的連接數: 同一時刻可以同時向數據庫申請的連接數 ds.setMaxActive(5); //(3)指定最小活躍的連接數: 在數據庫連接池中保存的最少的空閑連接的數量 ds.setMinIdle(2); //(4)等待數據庫連接池分配連接的最長時間. 單位為毫秒. 超出該時間將拋出異常. ds.setMaxWait(1000*5); //4.從數據源中獲取數據庫連接 for(int i=0;i<10;i++){ new Thread(){ public void run(){ try { Connection conn = ds.getConnection(); System.out.println("獲取1個"+conn); Thread.sleep(3000); //隔3秒換回去 conn.close(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } } } |