日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【工具类】JDBCUtils,数据库连接池

發布時間:2025/5/22 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【工具类】JDBCUtils,数据库连接池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC

概念:Java DataBase Connectivity Java 數據庫連接, Java語言操作數據庫
* JDBC本質:其實是官方(sun公司)定義的一套操作所有關系型數據庫的規則,即接口。各個數據庫廠商去實現這套接口,提供數據庫驅動jar包。我們可以使用這套接口(JDBC)編程,真正執行的代碼是驅動jar包中的實現類。

基本入門

* 代碼實現:Statement stmt = null;Connection conn = null;try {//1. 注冊驅動Class.forName("com.mysql.jdbc.Driver");//2. 定義sql//account表 添加一條記錄String sql = "insert into account values(null,'王五',3000)";//account表 修改記錄String sql = "update account set balance = 1500 where id = 3";//account表 刪除一條記錄String sql = "delete from account where id = 3";//3.獲取Connection對象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//4.獲取執行sql的對象 Statementstmt = conn.createStatement();//5.執行sqlint count = stmt.executeUpdate(sql);//影響的行數//6.處理結果System.out.println(count);if(count > 0){System.out.println("添加成功!");}else{System.out.println("添加失敗!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {//stmt.close();//7. 釋放資源//避免空指針異常if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}

DriverManager:驅動管理對象

1. 注冊驅動:告訴程序該使用哪一個數據庫驅動jarstatic void registerDriver(Driver driver) :注冊與給定的驅動程序 DriverManager 。 寫代碼使用: Class.forName("com.mysql.jdbc.Driver");這段代碼會初始化下面的靜態代碼塊通過查看源碼發現:在com.mysql.jdbc.Driver類中存在靜態代碼塊static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}注意:mysql5之后的驅動jar包可以省略注冊驅動的步驟。 2. 獲取數據庫連接:* 方法:static Connection getConnection(String url, String user, String password) * 參數:* url:指定連接的路徑* 語法:jdbc:mysql://ip地址(域名):端口號/數據庫名稱* 例子:jdbc:mysql://localhost:3306/db3* 細節:如果連接的是本機mysql服務器,并且mysql服務默認端口是3306,則url可以簡寫為:jdbc:mysql:///數據庫名稱* user:用戶名* password:密碼 //獲取數據庫連接對象//Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");Connection conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");

Connection:數據庫連接對象

功能:1. 獲取執行sql 的對象,獲取執行平臺,一個預編譯的執行平臺* Statement createStatement()* PreparedStatement prepareStatement(String sql) 注意:* 一定要保證處于同一個事物中的所有材質使用的是同一個connection對象* 一個事務中的多次操作必須是同一個連接2. 管理事務:* 開啟事務:setAutoCommit(boolean autoCommit) :調用該方法設置參數為false,即開啟事務* 提交事務:commit() * 回滾事務:rollback()

Statement:執行sql的對象

1. boolean execute(String sql) :可以執行任意的sql 了解,因為這個方法可以執行任意的sql語句,如果執行的是查詢語句,執行完成之后需要我們自己去獲取查詢結果 2. int executeUpdate(String sql) :執行DML(insert、update、delete)語句、DDL(create,alter、drop)語句* 返回值:影響的行數,可以通過這個影響的行數判斷DML語句是否執行成功 返回值>0的則執行成功,反之,則失敗。 3. ResultSet executeQuery(String sql) :執行DQL(select)語句,只能執行查詢語句

ResultSet:結果集對象,封裝查詢結果

* boolean next(): 游標向下移動一行,判斷當前行是否是最后一行末尾(是否有數據),如果是,則返回false,如果不是則返回true * getXxx(參數):獲取數據* Xxx:代表數據類型 如: int getInt() , String getString()* 參數:1. int:代表列的編號,1開始 如: getString(1)2. String:代表列名稱。 如: getDouble("balance")* 注意:* 使用步驟:1. 游標向下移動一行2. 判斷是否有數據3. 獲取數據//循環判斷游標是否是最后一行末尾。while(rs.next()){//獲取數據//6.2 獲取數據int id = rs.getInt(1);String name = rs.getString("name");double balance = rs.getDouble(3);System.out.println(id + "---" + name + "---" + balance);}

PreparedStatement:執行sql的對象

1. SQL注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字符串的拼接。會造成安全性問題1. 輸入用戶隨便,輸入密碼:a' or 'a' = 'a2. sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a' 2. 解決sql注入問題:使用PreparedStatement對象來解決 3. 預編譯的SQL:參數使用?作為占位符 4. 注意:建議使用PreparedStatement來完成增刪改查的所有操作1. 可以防止SQL注入2. 效率更高

數據庫連接池

1. 概念:其實就是一個容器(集合),存放數據庫連接的容器。當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之后,會將連接對象歸還給容器。2. 好處:1. 節約資源2. 用戶訪問高效3. 實現:1. 標準接口:DataSource javax.sql包下的1. 方法:* 獲取連接:getConnection()* 歸還連接:Connection.close()。如果連接對象Connection是從連接池中獲取的,那么調用Connection.close()方法,則不會再關閉連接了。而是歸還連接2. 一般我們不去實現它,有數據庫廠商來實現1. C3P0:數據庫連接池技術2. Druid:數據庫連接池實現技術,由阿里巴巴提供的

C3P0:數據庫連接池技術

* 步驟:1. 導入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,2. 定義配置文件:* 名稱: c3p0.properties 或者 c3p0-config.xml* 路徑:直接將文件放在src目錄下即可。3. 創建核心對象 數據庫連接池對象 ComboPooledDataSource4. 獲取連接: getConnection * 代碼:/* * 創建數據庫連接池對象,c3p0是一個開源的JDBC連接池,* 它相對于Druid來說有一個更方便的配置連接方式,就是自動讀取配置文件**/DataSource ds = new ComboPooledDataSource();// 獲取連接對象Connection conn = ds.getConnection();

Druid:數據庫連接池實現技術,由阿里巴巴提供的

1. 導入jar包 druid-1.0.9.jar 2. 定義配置文件:* 是properties形式的* 可以叫任意名稱,可以放在任意目錄下 3. 加載配置文件。Properties 4. 獲取數據庫連接池對象:通過工廠來來獲取 DruidDataSourceFactory 5. 獲取連接:getConnection//加載配置文件Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//獲取連接池對象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//獲取連接Connection conn = ds.getConnection();

抽取JDBC工具類 : JDBCUtils

1. 定義一個類 JDBCUtils 2. 提供靜態代碼塊加載配置文件,初始化連接池對象 3. 提供方法1. 獲取連接方法:通過數據庫連接池獲取連接2. 釋放資源3. 獲取連接池的方法

代碼:

/* * 1. 聲明靜態數據源成員變量 * 2. 創建連接池對象 * 3. 定義公有的得到數據源的方法 * 4. 定義得到連接對象的方法 * 5. 定義關閉資源的方法 **/ public class JDBCUtils {// 1. 聲明靜態數據源成員變量private static DataSource ds;// 2. 創建連接池對象static {// 加載配置文件中的數據InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");Properties pp = new Properties();try {pp.load(is);// 創建連接池,使用配置文件中的參數ds = DruidDataSourceFactory.createDataSource(pp);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}// 3. 定義公有的得到數據源的方法public static DataSource getDataSource() {return ds;}// 4. 定義得到連接對象的方法public static Connection getConnection() throws SQLException {return ds.getConnection();}// 5.定義關閉資源的方法public static void close(Connection conn, Statement stmt, ResultSet rs) {if (rs != null) {try {rs.close();} catch (SQLException e) {}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {}}if (conn != null) {try {conn.close();} catch (SQLException e) {}}}// 6.重載關閉方法public static void close(Connection conn, Statement stmt) {close(conn, stmt, null);} }

4,SpringJDBC框架

1,步驟

* Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發 * 步驟:1. 導入jar包2. 創建JdbcTemplate對象。依賴于數據源DataSource* JdbcTemplate template = new JdbcTemplate(ds);3. 調用JdbcTemplate的方法來完成CRUD的操作* update():執行DML語句。增、刪、改語句* queryForMap():查詢結果將結果集封裝為map集合,將列名作為key,將值作為value 將這條記錄封裝為一個map集合* 注意:這個方法查詢的結果集長度只能是1* queryForList():查詢結果將結果集封裝為list集合* 注意:將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中* query():查詢結果,將結果封裝為JavaBean對象* query的參數:RowMapper* 一般我們使用BeanPropertyRowMapper實現類。可以完成數據到JavaBean的自動封裝* new BeanPropertyRowMapper<類型>(類型.class)* queryForObject:查詢結果,將結果封裝為對象* 一般用于聚合函數的查詢

總結

以上是生活随笔為你收集整理的【工具类】JDBCUtils,数据库连接池的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品视频a | 国产精品无码av无码 | 熟女少妇精品一区二区 | 色图色小说 | 69欧美视频 | 91性| 黄页网站视频在线观看 | 欧美精品四区 | 污污网站在线看 | 操伊人| 99久久久无码国产精品免费蜜柚 | 色就是色综合 | 国产黄a三级三级看三级 | 亚洲AV无码国产日韩久久 | 九九看片 | 天堂久久久久久 | 欧美日韩中文在线观看 | 日本涩涩网站 | av自拍偷拍 | 蜜臀av免费在线观看 | 国产三级日本三级在线播放 | 婷婷啪啪 | 中文字幕伦理 | 99干99| √天堂8资源中文在线 | 91大神视频在线播放 | 黄色成人在线播放 | 波多野结衣一区二区三区免费视频 | 一区久久 | 成人午夜影院 | 亚洲第一黄网 | gav久久| 亚洲热热| 久久久永久久久人妻精品麻豆 | 成人xxxx| 国产精品久久久精品三级 | 日本黄色大片视频 | 九色综合网 | 日韩污视频在线观看 | 成人国产一区二区三区精品麻豆 | 成人激情视频在线 | 波多野结衣啪啪 | 国产中年熟女高潮大集合 | 丝袜老师办公室里做好紧好爽 | 在线免费观看黄视频 | 欧美黄色一区二区三区 | 午夜一二区 | 日本性爱视频在线观看 | 国产精品一区二区网站 | 久久aⅴ国产欧美74aaa | 午夜久久视频 | 亚洲av电影一区 | v8888av | 91爱啪| 黄色成人在线视频 | 日日日日操 | 91午夜精品亚洲一区二区三区 | 蜜桃视频成人 | 精品少妇3p | av第一福利大全导航 | 国产又粗又猛视频 | 一区二区三区视频观看 | 四虎影视免费永久大全 | 日韩福利在线观看 | 日本视频色 | av在线资源播放 | 象人高潮调教丨vk | 欧美日韩高清在线 | 强制高潮抽搐哭叫求饶h | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 九色丨蝌蚪丨成人 | 日本不卡视频在线播放 | 最新国产在线视频 | 午夜影院免费在线观看 | 国产96视频| 韩国av一区二区三区 | 日日嗨av一区二区三区四区 | 成人刺激视频 | 欧美日韩在线国产 | 日韩国产欧美在线观看 | 啪免费视频 | 国产视频一区二区视频 | 欧美日韩亚 | 亚洲精品天天 | 日韩资源网 | 成人爽a毛片一区二区 | 免费无码肉片在线观看 | 欧美性xxxxx 亚洲特黄一级片 | 男女男网站 | 四级黄色片| 日韩av一区二区在线播放 | 你懂的在线视频网站 | 国产精品久久久久不卡 | 性生交大片免费看女人按摩 | 梦梦电影免费高清在线观看 | 欧美偷拍精品 | 美女黄视频在线观看 | 不卡在线| 日本欧美在线视频 |