天天看點

tomcat中配置連接配接池

使用管理界面配置連接配接池比改動xml檔案安全得多,而且友善快捷。   1.登陸管理界面 http://localhost:8080/admin   密碼和使用者名在你安裝的時候設定的,如果忘記(或沒有)的話,去改tomcat/conf/tomcat-users.xml,添加admin和manager兩 個role,一個使用者,該使用者的role為admin和manager就可以了,按原有的xml複制修改就可以。   2.設定步驟    2.1 點選左邊架構中Service菜單項左邊的小圓,展開清單.    2.2 點選左邊架構中Host (localhost)菜單項左邊的小圓,展開清單.    2.3 點選左邊架構中你要添加連接配接池的工作目錄的菜單項左邊的小圓,展開清單.    2.4 點選左邊架構中Data Sources蔡單項,右邊架構出現設定頁。    2.5 從右邊架構中右上角的Data Source Actions下拉清單中選擇create new data source    2.6 填寫示例: JNDI Name: jdbc/MyDataSource Data Source URL: jdbc:oracle:thin:@localhost:1521:MyOracle JDBC Driver Class: oracle.jdbc.driver.OracleDriver User Name: test Password: test      2.7 點選右邊架構中右上角save按鈕    2.8 點選頂部架構Commit Changes按鈕。    2.9 使用示例: 點選檢視DbWrapper.java    2.10 圖檔           封裝資料庫操作,目的就是為了隐藏java.sql包内的類,在編碼中去掉核心的資料庫操作代碼。以杜絕直接資料庫操作容易帶 來的資源未釋放問題。同時也減少了資料庫操作的編碼量。   但是很多網友在封裝時,卻喜歡傳回結果集(ResultSet對象),那麼這個封裝就沒有意義了。 1. 又是直接操作核心資料庫類,跟封裝前幾乎沒什麼變化。 2. 結果集總是依賴于它使用的連接配接(Connection)對象。是以當連接配接對象在方法内被關閉後,你傳回的ResultSet就沒有用了。   如果真的要獲得查詢資料庫的結果集,就把結果集對象内的所有資料,轉儲到以Map為元素的List對象内。 當然,這種方式,不能适應大資料量的查詢,不過如果真的碰到大資料量的查詢,那用什麼封裝都不好,還是得直接資料庫操作. :)))   下面是簡單的資料庫操作Javabean的代碼   DbWrapper.java import java.sql.*; import java.util.*; public class DbWrapper {     // 定義連接配接池對象為靜态變量,将一直存在,直到工作目錄關閉。     private static DataSource ds = null;     // 1.用連接配接池的方式獲得連接配接     // 如果不是做多資料庫程式,推薦使用此方法     // 相關内容:在tomcat管理界面配置連接配接池     public static Connection openConnection() throws Exception     {         // 隻需要初始化1次         if ( ds == null )         {             Context initContext = new InitialContext();             Context envContext = (Context) initContext.lookup("java:/comp/env");             DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");         }         return ds.getConnection();     }         // 2.用jdbc驅動獲得連接配接     // 相關内容:JSP資料庫連接配接大全     public static Connection openConnection(         String driver,         String url,         String username,         String password)             throws Exception     {         Class.forName(driver).newInstance();         return DriverManager.getConnection(url, username, password);     }         public static void closeConnection(Connection conn) throws Exception     {         if ( conn != null )         {             conn.close();         }     }     public static int executeUpdate(String sql) throws Exception     {        int count = 0;                 Connection conn = null;         Statement stmt = null;                 try         {             conn = openConnection();             stmt = conn.createStatement();                     count = stmt.executeUpdate(sql);         }         catch ( Exception e )         {             throw e;         }         finally         {             closeConnection(conn);         }                 return count;     }         public static List executeQuery(String sql) throws Exception     {         List list = new ArrayList();                 Connection conn = null;         Statement stmt = null;         ResultSet rs   = null;                 try         {             conn = openConnection();             stmt = conn.createStatement();             rs   = stmt.executeQuery(sql);                         ResultSetMetaData rsmd = rs.getMetaData();                     while ( rs.next() )             {                 Map map = new HashMap();                                 for ( int i = 1; i <= rsmd.getColumnCount(); i++ )                 {                     map.put(rsmd.getColumnName(i), rs.getObject(i));                 }                                 list.add(map);             }        }         catch ( Exception e )         {             e.printStackTrace();         }         finally         {             if ( rs != null ) rs.close();             closeConnection(conn);         }                 return list;    } }     使用示例: // 1.對于insert, update, delete語句int count = DbWrapper.executeUpdate(sql); // 2.對于selete語句 java.util.List list = DbWrapper.executeQuery(sql); // 方法一:按名字取值,注意大小寫是嚴格區分的 for ( int i = 0; i < list.size(); i++ ) {     java.util.Map map = (java.util.Map)list.get(i);     out.println(mag.get("column_name").toString()); } // 方法二:周遊取值 for ( int i = 0; i < list.size(); i++ ) {     java.util.Map map = (java.util.Map)list.get(i);     for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)     {         String column_name = it.next().toString());        // 取值時注意null判斷         out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString ());     } }                 在tomcat中配置連接配接池   1.打開server.xml:在<Context > </Contex>中添加如下連接配接池參數語句,一個完整的例子如下: <?xml version='1.0' encoding='utf-8'?> <Context docBase="E:/Projects/ColorRing/wap" path="/wap" reloadable="true">  <Resource name="jdbc/wapOracle" auth="Container"         type="javax.sql.DataSource"/>  <ResourceParams name="jdbc/wapOracle">          <!--這裡name的值必須與Resource裡的name的值相同-->    <parameter>      <name>factory</name>      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>    </parameter>      <parameter>       <name>url</name>       <value>jdbc:oracle:thin:@172.18.51.101:1521:sundb</value>   <!--連接配接資料庫的url-->     </parameter>     <parameter>       <name>maxIdle</name>       <value>20</value>     </parameter>     <parameter>       <name>maxActive</name>       <value>0</value>      </parameter>     <parameter>       <name>driverClassName</name>       <value>oracle.jdbc.driver.OracleDriver</value>     </parameter>     <parameter>       <name>maxWait</name>       <value>5000</value>     </parameter>     <parameter>       <name>removeAbandoned</name>       <value>true</value>     </parameter>     <parameter>                            <name>username</name>           <!--使用者名-->       <value>cms_user</value>     </parameter>     <parameter>       <name>logAbandoned</name>       <value>true</value>     </parameter>     <parameter>       <name>removeAbandonedTimeout</name>       <value>60</value>     </parameter>     <parameter>       <name>password</name>          <!--密碼-->       <value>12345</value>     </parameter>  </ResourceParams> </Context>     2.打開工程下的WEB-INF/web.xml,添加如下部分:  <resource-ref>     <description>Oracle Datasource example</description>     <res-ref-name>jdbc/wapOracle</res-ref-name>           <!--這裡name的值也必須與server.xml中的Resource裡的 name的值相同-->     <res-type>javax.sql.DataSource</res-type>     <res-auth>Container</res-auth>  </resource-ref>   3.然後寫連接配接資料庫的語句: package util;   import java.sql.*; import javax.sql.*; import javax.naming.*;   public class OracleDB {     String url_ = "192.168.1.41:1521:gxcring";     //String url_ = "172.18.51.101:1521:SUNDB";     String id_ = "cms_user";     String pass_ = "12345";       Connection conn = null;     Statement stmt = null;       public OracleDB() {         try {             //Class.forName("oracle.jdbc.driver.OracleDriver");             //conn = DriverManager.getConnection("jdbc:oracle:thin:@" + url_, id_, pass_);             Context initContext = new InitialContext();             Context envContext = (Context) initContext.lookup("java:/comp/env");             DataSource ds = (DataSource) envContext.lookup("jdbc/wapOracle");       //注意這裡的名字與配置檔案 裡的名字相同就行了。             conn = ds.getConnection();               stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,                                         ResultSet.CONCUR_UPDATABLE);         } catch (NamingException ne) {             System.out.println("Initial DataSource error.");             ne.printStackTrace();         } catch (SQLException e) {             System.out.println("ORACLE: " + e);             e.printStackTrace();         }     }           public Connection getConn() {         return this.conn;     } }   呵呵。這樣就行啦, 在其它地方調用資料庫時與用JDBC沒有什麼分别。很簡單的。