亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

常用開源數據庫連接池與編寫自己的JDBC框架

2024-07-21 02:52:34
字體:
來源:轉載
供稿:網友

常用開源數據庫連接池

數據庫連接池都要實現DataSource接口

DBCP:

連接設置

driverClassName=com.MySQL.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc username=root passWord=

初始化連接

initialSize=10

最大連接數量

maxActive=50

最大空閑連接

maxIdle=20

最小空閑連接

minIdle=5

超時等待時間以毫秒為單位 6000毫秒/1000等于60秒

maxWait=60000

JDBC驅動建立連接時附帶的連接屬性屬性的格式必須為這樣:[屬性名=PRoperty;]

注意:”user” 與 “password” 兩個屬性會被明確地傳遞,因此這里不需要包含他們。

connectionProperties=useUnicode=true;characterEncoding=utf8

指定由連接池所創建的連接的自動提交(auto-commit)狀態。

defaultAutoCommit=true

driver default 指定由連接池所創建的連接的只讀(read-only)狀態。

如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動并不支持只讀模式,如:Informix)

defaultReadOnly=

driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。

可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE

defaultTransactionIsolation=READ_COMMITTED

private static DataSource ds=null; static{ try{ InputStream in=JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties prop=new Properties(); prop.load(in); BasicDataSourceFactory factory=new BasicDataSourceFactory(); ds=factory.createDataSource(prop); }catch(Exception e){ throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); }

C3P0:

配置文件:

c3p0-config.xml:

<?xml version="1.0" encoding="UTF-8"?><c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property> <property name="user">root</property> <property name="password">root</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </default-config> <named-config name="yjw"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property> <property name="user">root</property> <property name="password">root</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config></c3p0-config>

使用方法:

private static ComboPooledDataSource ds = null; static{ try{ ds = new ComboPooledDataSource(); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); }

Jndi容器

Tomcat數據庫連接池:

配置文件:

<Context> <Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/day16" initialSize="10" maxActive="30" maxIdle="4"/></Context>

不要忘記將數據庫驅動JAR包加入到Tomcat的lib目錄中 使用方法:

private static DataSource ds; static { try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); } catch (Exception e) { throw new RuntimeException(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); }

編寫自己的JDBC框架

元數據:數據庫,表,列的定義信息。 Connection.getDatabaseMetaData();

PreparedStatement.getParameterMetaData();//獲得代表PreparedStatement元數據的ParameterMetaData對象

ResultSet.getMetaData();//獲得代表ResultSet對象元數據的ResultSetMetaData對象。

public class JdbcUtils { private static DataSource ds = null; static{ try{ InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties prop = new Properties(); prop.load(in); BasicDataSourceFactory factory = new BasicDataSourceFactory(); ds = factory.createDataSource(prop); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ rs.close(); //throw new }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ st.close(); }catch (Exception e) { e.printStackTrace(); } st = null; } if(conn!=null){ try{ conn.close(); }catch (Exception e) { e.printStackTrace(); } } } //String sql = "insert into account(id,name,money) values(?,?,?)" object[]{1,"aaa","10000"}; public static void update(String sql,Object params[]) throws SQLException{ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = getConnection(); st = conn.prepareStatement(sql); for(int i=0;i<params.length;i++){ st.setObject(i+1,params[i]); } st.executeUpdate(); }finally{ release(conn, st, rs); } } // public static Object query(String sql,Object params[],ResultSetHandler handler) throws SQLException{ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = getConnection(); st = conn.prepareStatement(sql); for(int i=0;i<params.length;i++){ st.setObject(i+1,params[i]); } rs = st.executeQuery(); return handler.handler(rs); }finally{ release(conn, st, rs); } }} interface ResultSetHandler{ public Object handler(ResultSet rs);}class BeanHandler implements ResultSetHandler{ private Class clazz; public BeanHandler(Class clazz){ this.clazz = clazz; } public Object handler(ResultSet rs) { try{ if(!rs.next()){ return null; } //創建封裝結果集的bean Object bean = clazz.newInstance(); //得到結果集的元數據,以獲取結果集的信息 ResultSetMetaData meta = rs.getMetaData(); int count = meta.getColumnCount(); for(int i=0;i<count;i++){ String name = meta.getColumnName(i+1); //獲取到結果集每列的列名 id Object value = rs.getObject(name); //1 //反射出bean上與列名相應的屬性 Field f = bean.getClass().getDeclaredField(name); f.setaccessible(true); f.set(bean, value); } return bean; }catch (Exception e) { throw new RuntimeException(e); } }}class BeanListHandler implements ResultSetHandler{ private Class clazz; public BeanListHandler(Class clazz){ this.clazz = clazz; } public Object handler(ResultSet rs) { List list = new ArrayList(); try{ while(rs.next()){ Object bean = clazz.newInstance(); ResultSetMetaData meta = rs.getMetaData(); int count = meta.getColumnCount(); for(int i=0;i<count;i++){ String name = meta.getColumnName(i+1); Object value = rs.getObject(name); Field f = bean.getClass().getDeclaredField(name); f.setAccessible(true); f.set(bean, value); } list.add(bean); } }catch (Exception e) { throw new RuntimeException(e); } return list; }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人福利视频网| 色妞在线综合亚洲欧美| 97在线视频免费观看| 成人精品一区二区三区| 8x拔播拔播x8国产精品| 在线日韩中文字幕| 欧美与欧洲交xxxx免费观看| 国产91热爆ts人妖在线| 欧洲美女免费图片一区| 欧美大尺度电影在线观看| 色综合伊人色综合网| 另类少妇人与禽zozz0性伦| 久久久视频免费观看| 成人黄色av免费在线观看| 成人欧美一区二区三区在线湿哒哒| 国产精欧美一区二区三区| 日韩欧美国产中文字幕| 亚洲伊人一本大道中文字幕| 91wwwcom在线观看| 国产区精品视频| 精品动漫一区二区| 91色琪琪电影亚洲精品久久| 91欧美视频网站| 亚洲精品成人久久| 国产日韩欧美日韩| 亚洲一区亚洲二区亚洲三区| 国产精品免费福利| 欧美理论电影在线播放| 欧美日韩一区二区在线播放| 亚洲欧美另类自拍| 国产偷国产偷亚洲清高网站| 亚洲一区二区三区777| 欧美视频在线免费看| 久热爱精品视频线路一| 国产精品久久久久久久久久东京| 亚洲第一精品久久忘忧草社区| 欧美视频不卡中文| 国产日韩欧美成人| 亚洲欧美激情在线视频| 国产69精品久久久久9| 国产97在线播放| 成人信息集中地欧美| 国产成人精品最新| 国产成人av在线播放| 在线精品91av| 成人午夜一级二级三级| 成人h片在线播放免费网站| 国内自拍欧美激情| 日韩福利视频在线观看| 亚洲国产一区自拍| 日韩最新av在线| 欧美性猛交xxxx久久久| 国产91在线播放精品91| 中文字幕日韩av综合精品| 欧美精品成人91久久久久久久| 精品一区二区电影| 国产精品99久久久久久www| 97国产真实伦对白精彩视频8| 92版电视剧仙鹤神针在线观看| 日韩欧美国产成人| 97人人模人人爽人人喊中文字| 日韩欧美在线中文字幕| 亚洲精品乱码久久久久久按摩观| 91av在线免费观看视频| 亚洲国产精品久久精品怡红院| 北条麻妃在线一区二区| 亚洲成人网在线| 亚洲第五色综合网| 国产精品久久久久91| 亚洲三级av在线| 欧美在线精品免播放器视频| 亚洲黄页网在线观看| 亚洲色在线视频| 精品久久香蕉国产线看观看gif| 97色在线观看| 97人洗澡人人免费公开视频碰碰碰| 色偷偷9999www| 欧美一级bbbbb性bbbb喷潮片| 大胆人体色综合| 日本一区二区在线播放| 日韩视频在线观看免费| 日韩电影在线观看免费| 日韩在线欧美在线| 亚洲欧美一区二区三区四区| 欧洲亚洲免费在线| 亚洲精品国产精品久久清纯直播| 91在线色戒在线| 欧美日韩中国免费专区在线看| 欧美中文字幕精品| 国产美女久久精品| 欧美日韩国产中文字幕| 久久理论片午夜琪琪电影网| 97av视频在线| 亚洲综合视频1区| 久久亚洲国产成人| 日本国产欧美一区二区三区| 亚洲激情视频在线播放| 日韩中文字幕不卡视频| 亚洲成人黄色网址| 国产精品99导航| 久久香蕉国产线看观看av| 欧美极品少妇全裸体| 亚洲最大成人网色| 亚洲丁香久久久| 亚洲欧洲国产一区| 久久视频国产精品免费视频在线| 日韩在线小视频| 日韩av在线精品| 日日狠狠久久偷偷四色综合免费| 久久久黄色av| 日韩h在线观看| 精品视频偷偷看在线观看| 亚洲欧美日韩直播| 国产日韩在线看片| 日韩精品黄色网| 亚洲国产日韩欧美在线99| 日韩免费在线播放| 国产精品www网站| 日韩欧美极品在线观看| 成人www视频在线观看| 成人午夜在线影院| 国产精品福利在线观看| 最新国产精品拍自在线播放| 日韩精品一二三四区| 国产精品视频成人| 亚洲肉体裸体xxxx137| 51久久精品夜色国产麻豆| 亚洲专区在线视频| 91亚洲国产精品| 欧美成人精品激情在线观看| 韩国美女主播一区| 久久琪琪电影院| 国产精品女人网站| 国产精品久久视频| 精品性高朝久久久久久久| 欧美日韩亚洲天堂| 91国产精品视频在线| 亚洲美女性视频| 夜夜嗨av一区二区三区四区| 国产日韩精品综合网站| 欧美一区二区视频97| 久久久久久久999精品视频| 亚洲男人天堂网| 国产在线一区二区三区| 日韩欧美成人免费视频| 国产va免费精品高清在线观看| 久久久精品国产网站| 国产精品日韩欧美大师| 久久久成人精品| 欧美成年人视频网站| 尤物tv国产一区| 在线观看日韩www视频免费| 91免费观看网站| 97视频在线播放| 亚洲精品自在久久| 亚洲视频axxx| 久久天天躁狠狠躁老女人| 亚洲精品有码在线| 国产一区二区视频在线观看| 中文字幕一精品亚洲无线一区| 欧美夫妻性视频| 性金发美女69hd大尺寸| 美日韩精品免费视频| 91嫩草在线视频|