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

首頁 > 開發 > 綜合 > 正文

JDBC

2024-07-21 02:53:09
字體:
來源:轉載
供稿:網友
概念: java data source Connectivity  數據連接        JDBC 開發步驟          1 注冊驅動            2 獲得連接                    3 創建執行sql語句            4 釋放資        代碼實現:                    抽取工具類:package com.itheima.jdbc.utils; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.PRoperties; /** * JDBC的工具類 * @author apple * */public class JDBCUtils {   public static final String DRIVERCLASS;   public static final String URL;   public static final String USERNAME;   public static final String PASSWord;     static{          // 獲得屬性文件中的數據.          Properties properties = new Properties();          try {                 properties.load(new FileInputStream("src/db.properties"));          } catch (FileNotFoundException e) {                 e.printStackTrace();          } catch (IOException e) {                 e.printStackTrace();          }                   DRIVERCLASS = properties.getProperty("jdbc.driverClass");          URL = properties.getProperty("jdbc.url");          USERNAME = properties.getProperty("jdbc.username");          PASSWORD = properties.getProperty("jdbc.password");   }     // 加載驅動:   public static void loadDriver(){          try {                 Class.forName(DRIVERCLASS);          } catch (ClassNotFoundException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();          }   }     // 獲得連接:   public static Connection getConnection(){          loadDriver();          Connection conn = null;          try {                 conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);          } catch (SQLException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();          }          return conn;   }     // 釋放資源:   public static void release(Statement stmt,Connection conn){          if(stmt != null){                 try {                        stmt.close();                 } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                 }                 stmt = null;          }                   if(conn != null){                 try {                        conn.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 conn = null;          }   }     public static void release(ResultSet rs,Statement stmt,Connection conn){          if(rs!= null){                 try {                        rs.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 rs = null;          }          if(stmt != null){                 try {                        stmt.close();                 } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                 }                 stmt = null;          }                   if(conn != null){                 try {                        conn.close();                 } catch (SQLException e) {                        e.printStackTrace();                 }                 conn = null;          }   }}        連接池 Connection對象在JDBC使用的時候.使用的時候就會去創建一個對象,使用結束以后就會將這個對象給銷毀了.每次創建和銷毀對象都是耗時操作.需要使用連接池對其進行優化.程序初始化的時候,初始化多個連接,將多個連接放入到池中(內存中).每次獲取的時候,都可以直接從連接池中進行獲取.使用結束以后,將連接歸還到池中.修改類的方法:                                               1  繼承                        2 裝飾者模式                                            * 裝飾者模式的使用條件:                                            * 2.1增強的類和被增強的類實現相同的接口.                                            * 2.2在增強的類中能夠獲得被增強的類的引用.                                            * 接口中方法過多,只增強其中的一個方法.其他方法都需要原樣調用原有方法.                         3 動態修改                                            * JDK的動態代理使用條件:                                             * 被代理的對象必須實現接口. DBCP:         @Test   /**    * DBCP的一個入門:手動設置參數    */   public void demo1(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 創建連接池:          BasicDataSource dataSource = new BasicDataSource();          dataSource.setDriverClassName("com.MySQL.jdbc.Driver");          dataSource.setUrl("jdbc:mysql:///web07");          dataSource.setUsername("root");          dataSource.setPassword("1234");          try{                 // 獲得連接:                 conn = dataSource.getConnection();                 // 編寫SQL語句.                 String sql = "insert into category values (null,?)";                 // 預編譯SQL:                 pstmt = conn.prepareStatement(sql);                 // 設置參數:                 pstmt.setString(1, "鞋靴箱包");                 //執行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   }    @Test   /**    * DBCP的帶有配置文件的方式    */   public void demo2(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 創建連接池:          try{                 Properties properties = new Properties();                 properties.load(new FileInputStream("src/dbcp.properties"));                 DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);                 // 獲得連接:                 conn = dataSource.getConnection();                 // 編寫SQL語句.                 String sql = "insert into category values (null,?)";                 // 預編譯SQL:                 pstmt = conn.prepareStatement(sql);                 // 設置參數:                 pstmt.setString(1, "生活用品");                 //執行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   } DBCP的參數的設置:#連接設置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=1234 #<!-- 初始化連接 -->initialSize=10 #最大連接數量maxActive=50 #<!-- 最大空閑連接 -->maxIdle=20 #<!-- 最小空閑連接 -->minIdle=5 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60秒 -->maxWait=60000c3p0:        代碼實現:   @Test   /**    * 手動設置參數的方式:    */   public void demo1(){          Connection conn = null;          PreparedStatement stmt = null;          // System.err.println("");          try{                 // 創建連接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource();                 // 設置參數:                 dataSource.setDriverClass("com.mysql.jdbc.Driver");                 dataSource.setJdbcUrl("jdbc:mysql:///web07");                 dataSource.setUser("root");                 dataSource.setPassword("1234");                                 conn = dataSource.getConnection();//               編寫SQL                 String sql = "insert into category values (null,?)";                 // 預編譯SQL:                 stmt = conn.prepareStatement(sql);                 // 設置參數:                 stmt.setString(1, "食品飲料");                 stmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(stmt, conn);          }   }    @Test   /**    * 配置文件的方式:    */   public void demo2(){          Connection conn = null;          PreparedStatement stmt = null;          // System.err.println("");          try{                 // 創建連接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql11111");                                 conn = dataSource.getConnection();//               編寫SQL                 String sql = "insert into category values (null,?)";                 // 預編譯SQL:                 stmt = conn.prepareStatement(sql);                 // 設置參數:                 stmt.setString(1, "食品飲料222");                 stmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(stmt, conn);          }   }【使用C3P0改寫了工具類】public class JDBCUtils2 {     private static final ComboPooledDataSource DATASOURCE =new ComboPooledDataSource();     public Connection getConnection(){          Connection conn = null;          try {                 conn = DATASOURCE.getConnection();          } catch (SQLException e) {                 e.printStackTrace();          }          return conn;   }     ...}DBUtilsDBUtils【概述】DBUtils是java編程中的數據庫操作實用工具,小巧簡單實用。DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。Dbutils三個核心功能介紹l  QueryRunner中提供對sql語句操作的API.l  ResultSetHandler接口,用于定義select操作后,怎樣封裝結果集.l  DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法 【QueryRunner核心類】l  QueryRunner(DataSource ds) ,提供數據源(連接池),DBUtils底層自動維護連接connectionl  update(String sql, Object... params) ,執行更新數據l  query(String sql, ResultSetHandler<T> rsh, Object... params) ,執行查詢 【ResultSetHandler結果集處理類】
ArrayHandler將結果集中的第一條記錄封裝到一個Object[]數組中,數組中的每一個元素就是這條記錄中的每一個字段的值
ArrayListHandler將結果集中的每一條記錄都封裝到一個Object[]數組中,將這些數組在封裝到List集合中。
BeanHandler將結果集中第一條記錄封裝到一個指定的javaBean中。
BeanListHandler將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
ColumnListHandler將結果集中指定的列的字段值,封裝到一個List集合中
KeyedHandler將結果集中每一條記錄封裝到Map<String,Object>,在將這個map集合做為另一個Map的value,另一個Map集合的key是指定的字段的值。
MapHandler將結果集中第一條記錄封裝到了Map<String,Object>集合中,key就是字段名稱,value就是字段值 
MapListHandler將結果集中每一條記錄封裝到了Map<String,Object>集合中,key就是字段名稱,value就是字段值,在將這些Map封裝到List集合中。
ScalarHandler它是用于單數據。例如select count(*) from 表操作。
 【DbUtils】closeQuietly(Connection conn) 關閉連接,如果有異常try后不拋。commitAndCloseQuietly(Connection conn) 提交并關閉連接rollbackAndCloseQuietly(Connection conn) 回滾并關閉連接
上一篇:Android SQLite使用

下一篇:mysq入門l練習題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲加勒比久久88色综合| 一区二区三区久久精品| 国产91精品高潮白浆喷水| 久久久成人的性感天堂| 欧美激情伊人电影| 国产午夜精品久久久| 欧美大全免费观看电视剧大泉洋| 亚洲va久久久噜噜噜久久天堂| 亚洲美女中文字幕| 久久精品色欧美aⅴ一区二区| 久久久久久网址| 欧美激情视频给我| 亚洲精品电影在线观看| 国产一区二区三区精品久久久| 2019中文字幕在线| 精品福利免费观看| 国产不卡av在线| 日韩精品一区二区三区第95| 成人免费高清完整版在线观看| 亚洲精品v欧美精品v日韩精品| 日韩av在线免播放器| 欧美激情手机在线视频| 伦理中文字幕亚洲| 97精品久久久中文字幕免费| 成人午夜一级二级三级| 精品久久久久久久中文字幕| 日韩精品中文字幕视频在线| 成人黄色在线免费| 久久久久亚洲精品成人网小说| 国产欧美日韩中文字幕| 欧美高清视频在线播放| 久久天天躁狠狠躁老女人| 亚洲色图激情小说| 久久综合免费视频| 欧美日韩在线看| 国产婷婷97碰碰久久人人蜜臀| 三级精品视频久久久久| 亚洲国产欧美一区| 亚洲色图偷窥自拍| 国产精品综合网站| 国产日韩欧美在线播放| 亚洲欧美色婷婷| 国产精品中文字幕久久久| 亚洲国产精彩中文乱码av在线播放| 国产精品高清在线观看| 国产日本欧美一区二区三区在线| 欧美xxxx做受欧美.88| 在线观看日韩视频| 国产欧美欧洲在线观看| 精品视频—区二区三区免费| 国产一区二区三区在线看| 狠狠色噜噜狠狠狠狠97| 国产做受69高潮| 国产精品免费福利| 亚洲国产成人av在线| 久久黄色av网站| 亚洲欧美中文日韩v在线观看| 国产精品久久久av| 亚洲第一精品久久忘忧草社区| 亚洲四色影视在线观看| 成人黄色在线观看| 日韩精品视频三区| 亚洲男人的天堂在线| 日韩国产欧美区| 欧美又大又硬又粗bbbbb| 91chinesevideo永久地址| 国模视频一区二区三区| 亚洲欧美国产日韩天堂区| 91免费视频网站| 亚洲丁香婷深爱综合| 久久99国产精品自在自在app| 68精品国产免费久久久久久婷婷| 日韩在线观看免费高清完整版| 91po在线观看91精品国产性色| 久久久国产一区二区| 久久久电影免费观看完整版| 国产精品爽黄69| 亚洲最新在线视频| 黑人精品xxx一区| 国产成人精品日本亚洲专区61| 欧美日韩国产中字| 国产精品一区二区性色av| 亚洲激情小视频| 亚洲女人天堂色在线7777| 国产精品电影久久久久电影网| 欧美高清视频一区二区| 午夜精品久久久久久久白皮肤| 日韩人体视频一二区| 欧美性视频网站| 日韩网站在线观看| 一本一本久久a久久精品综合小说| 国产精品久久久久久久久久免费| 国产精品高潮视频| 久久久久北条麻妃免费看| 中文日韩电影网站| 亚洲第一二三四五区| 成人精品一区二区三区| 国产福利成人在线| 黄网站色欧美视频| 欧美综合国产精品久久丁香| 美日韩丰满少妇在线观看| 欧美精品亚州精品| 日韩av手机在线| 国产精品日韩欧美大师| 91精品国产高清久久久久久久久| 亚洲精品中文字| 国产精品极品美女在线观看免费| 国产91精品久久久久久久| 欧美老女人在线视频| 日韩精品免费在线播放| 久久噜噜噜精品国产亚洲综合| 91久久国产精品| 国产成+人+综合+亚洲欧洲| 国产精品丝袜白浆摸在线| 日韩精品在线播放| 国产精品白嫩初高中害羞小美女| 精品偷拍一区二区三区在线看| 亚洲美女喷白浆| 日本19禁啪啪免费观看www| 97久久伊人激情网| 亚洲a成v人在线观看| 欧美国产第一页| 欧美大人香蕉在线| 久热国产精品视频| 国产不卡精品视男人的天堂| 国产欧美韩国高清| 欧美一区二区大胆人体摄影专业网站| 日韩三级影视基地| 欧美日韩成人精品| 日韩欧美一区二区三区| www.日韩免费| 日韩欧美亚洲一二三区| 亚洲国产精品yw在线观看| 亚洲欧洲xxxx| 国产精品扒开腿做爽爽爽视频| 亚洲伦理中文字幕| 成人激情黄色网| 91精品免费视频| 久久久久久国产| 精品国产一区二区在线| 国产在线精品播放| 91亚洲精品视频| 久久影视三级福利片| 91av视频在线免费观看| 欧美黑人极品猛少妇色xxxxx| 日韩精品久久久久久福利| 亚洲人成自拍网站| 国内精久久久久久久久久人| 九九九久久久久久| 欧美电影免费观看高清| 亚洲免费视频在线观看| 欧美夫妻性视频| 欧美黑人一级爽快片淫片高清| 欧美日韩国产成人高清视频| 亚洲午夜精品久久久久久久久久久久| 国产精品久久久久久久久久久久久| www.亚洲免费视频| 亚洲成**性毛茸茸| 欧美性猛交xxxx黑人| 国产激情视频一区| 亚洲国产日韩欧美在线动漫| 欧美激情国产日韩精品一区18| 亚洲免费一在线| 欧美国产欧美亚洲国产日韩mv天天看完整|