国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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練習題

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善右旗| 华容县| 西林县| 古蔺县| 普定县| 伊金霍洛旗| 即墨市| 桑植县| 吉木乃县| 岳西县| 淅川县| 阿克陶县| 日喀则市| 三门县| 昌吉市| 惠来县| 余干县| 乌鲁木齐市| 宜宾县| 北宁市| 古田县| 武川县| 穆棱市| 定南县| 遵化市| 福贡县| 伽师县| 崇文区| 崇阳县| 临泽县| 宣城市| 元氏县| 津市市| 江华| 宾川县| 四子王旗| 辽中县| 革吉县| 泰和县| 城步| 通榆县|