Java Durid進(jìn)行JDBC連接詳解
一、Druid簡介
Druid是阿里開源的數(shù)據(jù)庫連接池,作為后起之秀,性能比dbcp、c3p0更高,使用也越來越廣泛。
當(dāng)然Druid不僅僅是一個(gè)連接池,還有很多其他的功能。
二、Druid的優(yōu)點(diǎn)
- 高性能。性能比dbcp、c3p0高很多。
- 只要是jdbc支持的數(shù)據(jù)庫,druid都支持,對數(shù)據(jù)庫的支持性好。并且Druid針對oracle、mysql做了特別優(yōu)化。
- 提供監(jiān)控功能??梢员O(jiān)控sql語句的執(zhí)行時(shí)間、ResultSet持有時(shí)間、返回行數(shù)、更新行數(shù)、錯(cuò)誤次數(shù)、錯(cuò)誤堆棧等信息,來了解連接池、sql語句的工作情況,方便統(tǒng)計(jì)、分析SQL的執(zhí)行性能
三、使用 Durid 進(jìn)行 JDBC MySQL 的連接
3.1 添加 Druid 的依賴、數(shù)據(jù)庫驅(qū)動(dòng)
<!-- mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.27</version> </dependency>
3.2 創(chuàng)建 JDBC 工具類
package cn.kgc.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.log4j.Logger; import java.io.File; import java.io.FileInputStream; import java.io.Serializable; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; /** * 【JDBC】業(yè)務(wù)工具類 */ public class JDBCReadUtils implements Serializable { private static Logger logger = Logger.getLogger(JDBCReadUtils.class); /** * 實(shí)現(xiàn)JDBCHelper的單例化 */ private static JDBCReadUtils instance = null; private QueryRunner runner = null; /** * 實(shí)現(xiàn)單例的過程中,創(chuàng)建唯一的數(shù)據(jù)庫連接池 */ private JDBCReadUtils(String url) { Properties properties = new Properties(); try { properties.load(new FileInputStream(new File(url))); runner = new QueryRunner(DruidDataSourceFactory.createDataSource(properties)); } catch (Exception e) { logger.error(e.getMessage(), e); } } public JDBCReadUtils() { } /** * 獲取單例 * * @return 單例 */ public static JDBCReadUtils getInstance(String url) { if (instance == null) { synchronized (JDBCReadUtils.class) { if (instance == null) { instance = new JDBCReadUtils(url); } } } return instance; } /** * 查詢(返回Array結(jié)果) */ private Object[] queryArray(String sql, Object... params) { Object[] result = null; try { result = runner.query(sql, new ArrayHandler(), params); } catch (SQLException e) { logger.error(e.getMessage()); } return result; } /** * 查詢(返回ArrayList結(jié)果) */ public List<Object[]> queryArrayList(String sql, Object... params) { List<Object[]> result = null; try { result = runner.query(sql, new ArrayListHandler(), params); } catch (SQLException e) { logger.error(e.getMessage()); } return result == null ? new ArrayList<>() : result; } /** * 更新(包括UPDATE、INSERT、DELETE,返回受影響的行數(shù)) */ public int update(String sql, Object... params) { int result = 0; try { result = runner.update(sql, params); } catch (SQLException e) { logger.error(e.getMessage()); } return result; } }
3.3 添加配置參數(shù)
在 resource 目錄中添加 jdbc.properties 文件并添加如下配置
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://singleNode:3306/spark?useSSL=false&createDatabaseIfNotExist=true&characterEncoding=UTF-8 username=root password=root
3.4 測試代碼
package cn.kgc; import cn.kgc.utils.JDBCReadUtils; import java.util.List; public class Test { public static void main(String[] args) { List<Object[]> result = JDBCReadUtils.getInstance("C:\\Users\\Administrator\\Desktop\\總部實(shí)戰(zhàn)課\\spark\\project\\src\\main\\resources\\jdbc.properties") .queryArrayList("select * from entity_question_number_accuracy limit 10;"); for (Object o[] : result) { System.out.println(o[0] + "\t" + o[1] + "\t" + o[2] + "\t" + o[3]); } } }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
使用Java注解和反射實(shí)現(xiàn)JSON字段自動(dòng)重命名
這篇文章主要介紹了如何使用Java注解和反射實(shí)現(xiàn)JSON字段自動(dòng)重命名,文中通過代碼示例和圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08關(guān)于SpringSecurity配置403權(quán)限訪問頁面的完整代碼
本文給大家分享SpringSecurity配置403權(quán)限訪問頁面的完整代碼,配置之前和配置之后的詳細(xì)介紹,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06Java中的線程同步與ThreadLocal無鎖化線程封閉實(shí)現(xiàn)
這篇文章主要介紹了Java中的線程同步與ThreadLocal無鎖化線程封閉實(shí)現(xiàn),Synchronized關(guān)鍵字與ThreadLocal變量的使用是Java中線程控制的基礎(chǔ),需要的朋友可以參考下2016-03-03SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的示例詳解
雖然Spring官方給我們提供了很多的啟動(dòng)器供我們使用,但有時(shí)候我們也會(huì)遇到某些特殊場景,這些啟動(dòng)器滿足不了。這個(gè)時(shí)候就需要自定義一個(gè)啟動(dòng)器供我們使用,本文為大家介紹了SpringBoot實(shí)現(xiàn)自定義啟動(dòng)器的方法,希望對大家有所幫助2023-01-01Spring Boot整合RabbitMQ開發(fā)實(shí)戰(zhàn)詳解
這篇文章主要介紹了Spring Boot整合RabbitMQ開發(fā)實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02EasyExcel自定義導(dǎo)出列和順序?qū)嵗a
這篇文章主要給大家介紹了關(guān)于EasyExcel自定義導(dǎo)出列和順序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例
斷點(diǎn)續(xù)傳指的是在下載或上傳時(shí),將下載或上傳任務(wù)人為的劃分為幾個(gè)部分,本文主要介紹了Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05