麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

JDBC

2024-07-21 02:53:09
字體:
供稿:網(wǎng)友
概念: java data source Connectivity  數(shù)據(jù)連接        JDBC 開發(fā)步驟          1 注冊驅(qū)動            2 獲得連接                    3 創(chuàng)建執(zhí)行sql語句            4 釋放資        代碼實現(xiàn):                    抽取工具類: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{          // 獲得屬性文件中的數(shù)據(jù).          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");   }     // 加載驅(qū)動:   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使用的時候.使用的時候就會去創(chuàng)建一個對象,使用結(jié)束以后就會將這個對象給銷毀了.每次創(chuàng)建和銷毀對象都是耗時操作.需要使用連接池對其進行優(yōu)化.程序初始化的時候,初始化多個連接,將多個連接放入到池中(內(nèi)存中).每次獲取的時候,都可以直接從連接池中進行獲取.使用結(jié)束以后,將連接歸還到池中.修改類的方法:                                               1  繼承                        2 裝飾者模式                                            * 裝飾者模式的使用條件:                                            * 2.1增強的類和被增強的類實現(xiàn)相同的接口.                                            * 2.2在增強的類中能夠獲得被增強的類的引用.                                            * 接口中方法過多,只增強其中的一個方法.其他方法都需要原樣調(diào)用原有方法.                         3 動態(tài)修改                                            * JDK的動態(tài)代理使用條件:                                             * 被代理的對象必須實現(xiàn)接口. DBCP:         @Test   /**    * DBCP的一個入門:手動設置參數(shù)    */   public void demo1(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 創(chuàng)建連接池:          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);                 // 設置參數(shù):                 pstmt.setString(1, "鞋靴箱包");                 //執(zhí)行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   }    @Test   /**    * DBCP的帶有配置文件的方式    */   public void demo2(){          Connection conn = null;          PreparedStatement pstmt = null;                   // 創(chuàng)建連接池:          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);                 // 設置參數(shù):                 pstmt.setString(1, "生活用品");                 //執(zhí)行SQL                 pstmt.executeUpdate();          }catch(Exception e){                 e.printStackTrace();          }finally{                 JDBCUtils.release(pstmt, conn);          }   } DBCP的參數(shù)的設置:#連接設置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=1234 #<!-- 初始化連接 -->initialSize=10 #最大連接數(shù)量maxActive=50 #<!-- 最大空閑連接 -->maxIdle=20 #<!-- 最小空閑連接 -->minIdle=5 #<!-- 超時等待時間以毫秒為單位 6000毫秒/1000等于60秒 -->maxWait=60000c3p0:        代碼實現(xiàn):   @Test   /**    * 手動設置參數(shù)的方式:    */   public void demo1(){          Connection conn = null;          PreparedStatement stmt = null;          // System.err.println("");          try{                 // 創(chuàng)建連接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource();                 // 設置參數(shù):                 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);                 // 設置參數(shù):                 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{                 // 創(chuàng)建連接池:                 ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql11111");                                 conn = dataSource.getConnection();//               編寫SQL                 String sql = "insert into category values (null,?)";                 // 預編譯SQL:                 stmt = conn.prepareStatement(sql);                 // 設置參數(shù):                 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編程中的數(shù)據(jù)庫操作實用工具,小巧簡單實用。DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫代碼。Dbutils三個核心功能介紹l  QueryRunner中提供對sql語句操作的API.l  ResultSetHandler接口,用于定義select操作后,怎樣封裝結(jié)果集.l  DbUtils類,它就是一個工具類,定義了關(guān)閉資源與事務處理的方法 【QueryRunner核心類】l  QueryRunner(DataSource ds) ,提供數(shù)據(jù)源(連接池),DBUtils底層自動維護連接connectionl  update(String sql, Object... params) ,執(zhí)行更新數(shù)據(jù)l  query(String sql, ResultSetHandler<T> rsh, Object... params) ,執(zhí)行查詢 【ResultSetHandler結(jié)果集處理類】
ArrayHandler將結(jié)果集中的第一條記錄封裝到一個Object[]數(shù)組中,數(shù)組中的每一個元素就是這條記錄中的每一個字段的值
ArrayListHandler將結(jié)果集中的每一條記錄都封裝到一個Object[]數(shù)組中,將這些數(shù)組在封裝到List集合中。
BeanHandler將結(jié)果集中第一條記錄封裝到一個指定的javaBean中。
BeanListHandler將結(jié)果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
ColumnListHandler將結(jié)果集中指定的列的字段值,封裝到一個List集合中
KeyedHandler將結(jié)果集中每一條記錄封裝到Map<String,Object>,在將這個map集合做為另一個Map的value,另一個Map集合的key是指定的字段的值。
MapHandler將結(jié)果集中第一條記錄封裝到了Map<String,Object>集合中,key就是字段名稱,value就是字段值 
MapListHandler將結(jié)果集中每一條記錄封裝到了Map<String,Object>集合中,key就是字段名稱,value就是字段值,在將這些Map封裝到List集合中。
ScalarHandler它是用于單數(shù)據(jù)。例如select count(*) from 表操作。
 【DbUtils】closeQuietly(Connection conn) 關(guān)閉連接,如果有異常try后不拋。commitAndCloseQuietly(Connection conn) 提交并關(guān)閉連接rollbackAndCloseQuietly(Connection conn) 回滾并關(guān)閉連接
上一篇:Android SQLite使用

下一篇:mysq入門l練習題

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美精品免费一区二区三区 | 美国黄色毛片女人性生活片 | 一级片九九| 12av电影| 精品一区二区三区免费毛片爱 | 18欧美性xxxx极品hd | v11av在线播放 | 欧美a∨亚洲欧美亚洲 | 国产精品久久久久久久久粉嫩 | 欧美精品一区二区三区在线 | 日韩黄色片在线观看 | 成人免费毛片一 | 亚洲一区久久 | 手机国产乱子伦精品视频 | 97香蕉超级碰碰久久免费软件 | 成人免费av在线播放 | 欧美77| 欧美精品久久天天躁 | 激情在线视频 | 国产亚洲精品久久久久久网站 | 一级外国毛片 | 91精品国产91| 中文字幕欧美一区二区三区 | 日韩色电影| 羞羞网站视频 | 日韩av在线资源 | 国产精品久久久久一区二区 | 日韩视频1| 99精品国产一区二区三区 | 久久国产一级片 | 在线亚洲免费视频 | 国产免费www| 欧美一级精品片在线看 | 动漫孕妇被羞羞视频 | xx53xx| 欧美扩阴视频 | 成人羞羞在线观看网站 | 鲁丝片一区二区三区免费入口 | 成人在线观看一区 | 羞羞视频免费网站男男 | free japan xxxxhdsex69 |