老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Java數據庫常用操作-創新互聯

一、JDBC驅動

創新互聯公司主要從事成都網站設計、做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務寬城,十年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:028-86922220

JDBC驅動的加載:

1、通過容器加載:

對于有容器的Java應用,可以直接將相應的驅動jar包放在容器的lib目錄下,例如在Tomcat做容器的web應用,將驅動復制到tomcat的lib子目錄下;

2、應用運行時加載:

如果希望應用自行加載相應的驅動,需要maven為應用打jar/war包時指定好搜尋驅動jar時的classpath,請參考:

https://maven.apache.org/shared/maven-archiver/examples/classpath.html

https://www.cnblogs.com/snaildev/p/8341610.html

示例一(可執行jar包下有lib目錄存放依賴jar包):

????????image ???????? ???????????? ????????????????org.apache.maven.plugins ????????????????maven-jar-plugin ????????????????2.4 ???????????????? ???????????????????? ???????????????????????? ????????????????????????????true ????????????????????????????lib/ ????????????????????????????some.package.MainClass ???????????????????????? ???????????????????? ???????????????? ???????????? ???????? ????

業務自行加載JDBC驅動時,需要在應用用JDBC之前執行如下操作加載驅動:

Class.forName("com.mysql.jdbc.Driver"); //?Then?the?following?begin?to?use?jdbc

二、通過連接池(DataSource的一種)管理與數據庫的連接

目前常用的連接池為Druid或Hikari,分別說明如下:

1、Druid連接池:

maven依賴:


????com.alibaba
????druid
????1.1.11

示例代碼:

DruidDataSource?createSource(String?name,?String?jdbcUrl,?String?userName,?String?password,
????????maxActive,?minIdle,?maxWait,?scanInterval,?minActiveTime)?{
????DruidDataSource?src?=?DruidDataSource();
????src.setName(name);
????src.setUrl(jdbcUrl);
????src.setUsername(userName);
????src.setPassword(password);
????src.setDriverClassName();?
????src.setInitialSize(minIdle);
????src.setMaxActive(maxActive);
????src.setMinIdle(minIdle);
????src.setMaxWait(maxWait);?
????src.setTimeBetweenEvictionRunsMillis(scanInterval);?
????src.setMinEvictableIdleTimeMillis(minActiveTime);???
????src.setTestWhileIdle();?
????src.setTestOnBorrow();??
????src.setTestOnReturn();
????src.setPoolPreparedStatements();?
????src.setMaxPoolPreparedStatementPerConnectionSize();?
????src.setValidationQuery();?
????src.setRemoveAbandoned();?
????src.setRemoveAbandonedTimeout();?
????src.setKeepAlive();?
????if(!isDataSourceOk(src)){
????????LOGGER.error("Data?source?"+?name?+?"test?failed");
????}
????return?src;
}
private?static?boolean?isDataSourceOk(DataSource?source){
????try?(Connection?connection?=?source.getConnection();
?????????PreparedStatement?stmt?=?connection.prepareStatement("select?1");
?????????ResultSet?resultSet?=?stmt.executeQuery()){
????????resultSet.next();
????????return?true;
????}catch?(Throwable?e){
????????return?false;
????}
}

2、Hikari連接池

maven依賴:


????com.zaxxer
????HikariCP
????3.2.0

示例代碼:

HikariDataSource?createSource(String?name,?String?jdbcUrl,?String?userName,?String?password,
????????connectionTimeout,?idleTimeout,?maxLifeTime,?poolSize)?{
????HikariDataSource?src?=?HikariDataSource();
????src.setPoolName(name);
????src.setJdbcUrl(jdbcUrl);
????src.setUsername(userName);
????src.setPassword(password);
????src.setDriverClassName();?
????src.setConnectionTimeout(connectionTimeout);
????src.setIdleTimeout(idleTimeout);?
????src.setMaxLifetime(maxLifeTime);?
????src.setMaximumPoolSize(poolSize);
????if(!isDataSourceOk(src)){
????????LOGGER.error("Data?source?"+?name?+?"test?failed");
????}
????return?src;
}

三、處理連接

1、首先通過連接池獲取連接,例如:

try(Connection?getConnection()?SQLException?{
????assert?DataSourceManager.getDataSource()?!=?null;
????return?DataSourceManager.getDataSource().getConnection();
}

2、連接的SQL請求提交方式

從連接池(無輪DruidDataSource還是HirakiDataSource)申請到Connection對象拿到后,默認的提交方式為自動提交,即此時調用connection.getAutoCommit()返回的一定是true;

Connection對象歸還連接池后,下次再從連接池申請一個Connection,默認的提交方式還是自動提交。需要清楚什時候用自動提交、什么時候適合手工提交。

概況起來就是,看申請到Connection對象到歸還Connection對象這期間使用同一個Connection對象做了什么操作:

(1)只有讀操作,沒有任何寫操作:用自動提交;

(2)只有一次對單個表的單條記錄有進行寫操作:用自動提交;

自動提交的代碼示例如下

try(Connection?connection?=?())?{
????block.apply(connection);?//?Do?all?query?or?only?one?update?for?only?one?record
}

(3)對同一張表的多條記錄進行了寫操作,或者對不同表的記錄分別進行了寫操作:根據是否需要回滾、性能要求,確定是否需要支持事務性;如果要支持事物性,必須采用手動提交;

手動提交的操作示例:

try(Connection?connection?=?())?{
????boolean?success?=?false;
????try{
????????T?t?=?block.apply(connection);?//?Use?this?connection?process?one?transaction
????????doCommit(connection);
????????success?=?true;
????????return?t;
????}finally{
????????if(!success)?{
????????????doRollback(connection);?//?If?possible,?support?rollback?when?failed
????????}
????}
}

上述復雜過程的block中可能對connection的提交模式進行了修改,為了保持代碼的兼容性,上述doCommit()及doRollback()的設計如下:

public?static?void?doCommit(Connection?connection)?throws?SQLException?{
????if?(!connection.getAutoCommit())?{
????????connection.commit();
????}
}
private?static?void?doRollback(Connection?connection)?throws?SQLException?{
????if?(SUPPORT_ROLLBACK?&&?!connection.getAutoCommit())?{
????????connection.rollback();
????}
}

(4)耗時的操作,數據量比較大,這時依賴數據庫的事物性及回滾已經沒法達到;這種情況下應該分多次提交,并有應用層提供回滾;

示例如下:

try(Connection?connection?=?())?{
????boolean?success?=?false;
????try{
????????block1.accept(connection);
????????doCommit(connection);
????????block2.accept(connection);
????????doCommit(connection);
????????success?=?true;
????}finally{
????????if(!success)?{
????????????block2.clear(connection);
????????????block1.clear(connection);
????????}
????}
}

另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網頁標題:Java數據庫常用操作-創新互聯
文章路徑:http://www.xueling.net.cn/article/pdjoi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产在视频线精品视频 | 伊人色综合九久久天天蜜桃 | 亚洲网站在线免费观看 | 麻豆视频免费网站 | 久久成人国产 | av色站 | 中文字幕日日骚 | 国产精品一区二区久久久久 | 妺妺窝人体色WWW聚色窝仙踪 | 国产亲子乱 | 国产精品久久人妻无码网站 | 亚洲欧美国产国产综合一区 | 有剧情的av| 热久久影视 | 亚洲精品区一区二区三区四区五区高 | 在线欧美国产 | 国产一二 | 日本中文字幕二区 | 精品久久久久久中文字幕 | 99久久精品国产一区二区野战 | 日韩精品一区二区三区不卡 | 国产v无毛| 国产开嫩苞视频在线观看 | 亚洲高清在线免费 | 日韩视频免费在线观看 | 国产91精品入口福利 | 国产老师做www爽爽爽视频 | 新四虎影院 | 欧美性欧美巨大黑白大战 | 伊人久久一区二区三区 | 欧美精品国产一区二区三区 | 亚洲AV激情无码专区在线播放 | 久热这里只有精品6 | 久久在线免费 | 羞羞影院午夜男女爽爽影院网站 | 亚洲一区二区三区四区视频 | jjzz4日本 | 巴西一级毛片 | 麻豆影片 | 最新精品国偷自产在线老年人 | 亚洲国产主播一区 |