jdbc基礎

回顧:java

sqlmysql

 sql分類:spring

  DDL:sql

   對象:數據庫和表數據庫

   關鍵詞:create alter drop truncateapache

   建立數據庫:create database day06;api

   刪除數據庫: drop database day06;數組

   建立表:create table user(安全

    id int primark key auto_increment,服務器

    username varchar(20)

   );

   

   修改表:

    alter table user rename to user10;

    alter table user add password varchar(20);

    alter table user change password pwd varchar(20);

    alter table user modify pwd int;

    alter table user drop pwd;

   

   刪除表:

    drop table user;

    

   經常使用的命令:

    use day06;

    show tables;

    desc user;

    show create table user;

   

  DML:

   對象:記錄(行)

   關鍵詞:insert update delete

   插入:

    insert into user values(字段值1,字段值2,...);-- 全部的字段

    insert into user(字段1,字段2....) values(字段值1,字段值2);-- 插入指定的字段

   更新:

    update user set 字段=字段值1,字段2=字段值2 where 條件;

   刪除:

    delete from user where 條件;

   擴展:

    之後開發中不多使用delete,數據無價,刪除有物理和邏輯(經常使用),

     邏輯刪除通常會在表中添加一個字段(isdel:若值爲1,表明刪除了;若爲0表明沒有刪除),

     此時的刪除操做變成了更新操做.

  DQL:

   select ... from 表名 where 條件 group by 分組字段 having 條件 order by 排序字段;

   執行順序:

    1.肯定數據來自那張表 from

    2.是否須要篩選 where 

    3.是否須要分組 group by

    4.分組後是否須要篩選 having

    5.是否須要排序 order by

    6.肯定顯示那些數據. select

  DCL:用戶 權限 事務

////////////////////////

auto_increment 自增

truncate 幹掉表,從新建立 和delete的區別

數據類型:

 int 和 varchar(size):可變長度

 date time datetime timestamp

////////////////////////////////////

多表的操做:

 表與表之間的關係:

  一對多:

   在多表的一方添加一個外鍵,外鍵的名稱通常是主表名稱_id,外鍵的類型和主表的主鍵的類型保持一致

   爲了保證數據的有效性和完整性,

    須要在多表上添加外鍵約束

     格式:

      alter table 多表 add [constraint [外鍵的名稱]] foreign key(外鍵名稱) references 主表名稱(主鍵);

  多對多:

   添加一張中間表,存放兩張表的主鍵,就能夠將多對多拆分紅兩個一對多了

   爲了保證數據的有效性和完整性,

    須要在中間表添加兩個外鍵約束

  一對一:(瞭解)

   1.兩個實體合二爲一(字段比較少)

   2.將一張表的主鍵添加外鍵約束便可

/////////////////////////////

多表的查詢:

 內鏈接:

  顯式:

   select a.*,b.* from a join b on 條件;

  隱式:

   select a.*,b.* from a,b where 條件;

 外鏈接:

  左外鏈接:

   select a.*,b.* from a left join b on 條件;

   以a爲主,展現全部數據,根據條件關聯查詢b表,知足條件則展現,不知足的話以null顯示

 子查詢::

  一個查詢依賴於另外一個查詢.

//////////////////////////////////////

案例1-經過jdbc完成單表的curd操做:

需求:

 對分類表完成操做.

技術分析:

 jdbc

///////////////////////

jdbc:

 java操做數據庫.jdbc是oracle公司指定的一套規範(一套接口)

 驅動:jdbc的實現類.由數據庫廠商提供.

 咱們就能夠經過一套規範操做不一樣的數據庫了(多態)

 jdbc做用:

  鏈接數據庫

  發送sql語句

  處理結果

 

jdbc操做步驟:★

 1.數據庫和表

 2.建立一個項目

 3.導入驅動jar包

 4.編碼:

  註冊驅動

  獲取鏈接

  編寫sql

  建立預編譯的語句執行者

  設置參數

  執行sql

  處理結果

  釋放資源

 import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBConnection

{

public static void main(String[] args)

{

String driver = "com.mysql.jdbc.Driver";

//localhost指本機,也能夠用本地ip地址代替,3306爲MySQL數據庫的默認端口號,「user」爲要鏈接的數據庫名

String url = "jdbc:mysql://localhost:3306/user";

//填入數據庫的用戶名跟密碼

String username = "test";

String password = "test";

String sql = "select * from user";//編寫要執行的sql語句,此處爲從user表中查詢全部用戶的信息

try

{

Class.forName(driver);//加載驅動程序,此處運用隱式註冊驅動程序的方法

}

catch(ClassNotFoundException e)

{

e.printStackTrace();

}

try

{

Connection con = DriverManager.getConnection(url,username,password);//建立鏈接對象

Statement st = con.createStatement();//建立sql執行對象

ResultSet rs = st.executeQuery(sql);//執行sql語句並返回結果集

while(rs.next())//對結果集進行遍歷輸出

{

System.out.println("username: "+rs.getString(1));//經過列的標號來得到數據

System.out.println("useradd: "+rs.getString("useradd"));//經過列名來得到數據

System.out.println("userage: "+rs.getInt("userage"));

}

//關閉相關的對象 從最外層 開始關閉

if(rs != null)

{

try

{

rs.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

if(st != null)

{

try

{

st.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

if(con !=null)

{

try

{

con.close();

}

catch(SQLException e)

{

e.printStackTrace();

}

}

}

catch(SQLException e)

{

e.printStackTrace();

}

}

}

 初始化數據庫和表:

  CREATE DATABASE day07;

  USE day07; 

  

  create table category(

   cid varchar(20) primary key,

   cname varchar(20)

  );

  

  insert into category values('c001','電器');

  insert into category values('c002','服飾');

  insert into category values('c003','化妝品');

  insert into category values('c004','書籍');

 

 IDE打開以後

  1.修改字符集 utf-8

  2.新建 java項目

  3.使用的jdk爲本身的jdk 不用使用內置

 

 使用junit單元測試

  要求:

   1.方法是public void xxx(){}

   2.在方法上添加 @Test

   3.在@Test 按下 ctrl+1(快速鎖定錯誤)

   4.在方法上右鍵 run as -->junit 就能夠執行方法了.

jdbc-api詳解:

 全部的包 都是 java.sql 或者 javax.sql

 

 DriverManager:管理了一組jdbc的操做 類

  經常使用方法:

   瞭解:註冊驅動 

    static void registerDriver(Driver driver) :

     經過查看 com.mysql.jdbc.Driver的源碼 有以下代碼

       static {

       try {

        java.sql.DriverManager.registerDriver(new Driver());//這段代碼咱們已經寫過

       } catch (SQLException E) {

        throw new RuntimeException("Can't register driver!");

       }

      }

     驅動註冊了兩次.咱們只須要將靜態代碼塊執行一次,類被加載到內存中會執行靜態代碼塊,而且只執行一次.

     如今只須要將類加載到內存中便可:

      方式1:

       ★Class.forName("全限定名");//包名+類名 com.mysql.jdbc.Driver

      方式2:

       類名.class;

      方式3:

       對象.getClass();

 

   掌握:獲取鏈接

    static Connection getConnection(String url, String user, String password) 

     參數1:告訴咱們鏈接什麼類型的數據庫及鏈接那個數據庫

        協議:數據庫類型:子協議 參數

      mysql: jdbc:mysql://localhost:3306/數據庫名稱

      oracle: jdbc:oracle:thin@localhost:1521@實例

      

     參數2:帳戶名 root

     參數3:密碼

 

 

 (瞭解)Driver:java.sql 接口 驅動

 Connection:鏈接 接口

  經常使用方法:

   獲取語句執行者:

    (瞭解)Statement createStatement() :獲取普通的語句執行者 會出現sql注入問題

 

攻擊

當應用程序使用輸入內容來構造動態sql語句以訪問數據庫時,會發生sql注入攻擊。若是代碼使用存儲過程,而這些存儲過程做爲包含未篩選的用戶輸入的字符串來傳遞,也會發生sql注入。sql注入可能致使攻擊者使用應用程序登錄在數據庫中執行命令。相關的SQL注入能夠經過測試工具pangolin進行。若是應用程序使用特權太高的賬戶鏈接到數據庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內容直接用來構造動態sql命令,或者做爲存儲過程的輸入參數,這些表單特別容易受到sql注入的攻擊。而許多網站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中自己的變量處理不當,使應用程序存在安全隱患。這樣,用戶就能夠提交一段數據庫查詢的代碼,根據程序返回的結果,得到一些敏感的信息或者控制整個服務器,因而sql注入就發生了。

 

    ★PreparedStatement prepareStatement(String sql) :獲取預編譯語句執行者

    (瞭解)CallableStatement prepareCall(String sql):獲取調用存儲過程的語句執行者

 

   瞭解:

    setAutoCommit(false) :手動開啓事務

    commit():提交事務

    rollback():事務回滾

 

 Statement:語句執行者 接口

 PreparedStatement:預編譯語句執行者 接口

  經常使用方法:

   設置參數:

    setXxx(int 第幾個問號,Object 實際參數);

     常見的方法:

       setInt

       setString

       setObject

   

   執行sql:

     ResultSet executeQuery() :執行 r 語句 返回值:結果集

     int executeUpdate() :執行cud 語句 返回值:影響的行數

 

 

 ResultSet:結果集 接口

  執行查詢語句以後返回的結果

   經常使用方法:

    boolean next():判斷是否有下一條記錄,如有返回true且將光標移到下一行,若沒有呢則返回false

     光標一開始處於第一條記錄的上面

    

    獲取具體內容

     getXxx(int|string)

      若參數爲int :第幾列

      若參數爲string:列名(字段名)

     例如:

      獲取cname的內容能夠經過

       getString(2)

       getString("cname")

     經常使用方法:

      getInt

      getString 也能夠獲取int值

      getObject 能夠獲取任意

///////////////////////

常見的配置文件格式:

 1.properties

  裏面內容的格式 key=value

 2.xml

/////////////////

若咱們的配置文件爲properties,而且放在src目錄下.

咱們能夠經過 ResourceBundle工具快速獲取裏面的配置信息

 使用步驟:

  1.獲取ResourceBundle 對象:

   static ResourceBundle getBundle("文件名稱不帶後綴名") 

  2.經過ResourceBundle 對象獲取配置信息 

   String getString(String key) :經過執行key獲取指定的value

//////////////////////

案例2-經過鏈接池(數據源)優化咱們的操做.

需求:

 使用jdbc的時候,沒操做一次都須要獲取鏈接(建立)用完以後把鏈接釋放掉了(銷燬),經過鏈接池來優化curd操做.

技術分析:

 鏈接池

////////////////////

鏈接池概述:

 管理數據庫的鏈接,

 做用:

  提升項目的性能.

 就是在鏈接池初始化的時候存入必定數量的鏈接,用的時候經過方法獲取,不用的時候歸還鏈接便可.

 全部的鏈接池必須實現一個接口 javax.sql.DataSource接口

 

 獲取鏈接方法:

  Connection getConnection() 

 歸還鏈接的方法就是之前的釋放資源的方法.調用connection.close();

自定義一個鏈接池(理解思想)

 

經常使用鏈接池:

 DBCP

 C3P0

///////////////////

增前方法

 1.繼承

 2.裝飾者模式(靜態代理)

 3.動態代理

//////////////

裝飾者模式:★★★

 使用步驟:

  1.裝飾者和被裝飾者實現同一個接口或者繼承同一個類

  2.裝飾者中要有被裝飾者的引用

  3.對須要加強的方法進行增強

  4.對不須要增強的方法調用原來方法

 ////////////////////////////////////

 經常使用的鏈接池:

 DBCP:(理解)

  apache組織

  使用步驟:

   1.導入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

   2.使用api

    a.硬編碼

     //建立鏈接池

     BasicDataSource ds = new BasicDataSource();

     

     //配置信息

     ds.setDriverClassName("com.mysql.jdbc.Driver");

     ds.setUrl("jdbc:mysql:///day07");

     ds.setUsername("root");

     ds.setPassword("1234");

    b.配置文件

     實現編寫一個properties文件

     //存放配置文件

     Properties prop = new Properties();

     prop.load(new FileInputStream("src/dbcp.properties"));

     //設置

     //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");

     

     //建立鏈接池

     DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

 C3P0:(★)

  hibernate和spring使用

  有自動回收空閒鏈接的功能.

  使用步驟:

   1.導入jar包(c3p0-0.9.1.2.jar)

   2.使用api

    a.硬編碼(不推薦)

     new ComboPooledDataSource()

    b.配置文件

     配置文件的名稱:c3p0.properties 或者 c3p0-config.xml

     配置文件的路徑:src下

    

     編碼只須要一句話

      new ComboPooledDataSource()//使用默認的配置

      new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默認的配置

      

////////////////////////////

案例3-使用dbutils完成curd操做

技術分析:

 dbutils

dbutils:

 是apache組織的一個工具類,jdbc的框架,更方便咱們使用

 使用步驟:

  1.導入jar包(commons-dbutils-1.4.jar)

  2.建立一個queryrunner類

   queryrunner做用:操做sql語句

    構造方法:

     new QueryRunner(Datasource ds);

  3.編寫sql

  4.執行sql

   query(..):執行r操做

   update(...):執行cud操做

////////////////////////////

核心類或接口

 QueryRunner:類名

  做用:操做sql語句

  構造器:

   new QueryRunner(Datasource ds);

  注意:

   底層幫咱們建立鏈接,建立語句執行者 ,釋放資源.

  經常使用方法:

   query(..):

   update(..):

 

 DbUtils:釋放資源,控制事務 類

  closeQuietly(conn):內部處理了異常

  commitAndClose(Connection conn):提交事務並釋放鏈接

  ....

 

 ResultSetHandler:封裝結果集 接口

  

   ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

   

   (瞭解)ArrayHandler, 將查詢結果的第一條記錄封裝成數組,返回

   (瞭解)ArrayListHandler, 將查詢結果的每一條記錄封裝成數組,將每個數組放入list中返回

   ★★BeanHandler, 將查詢結果的第一條記錄封裝成指定的bean對象,返回

   ★★BeanListHandler, 將查詢結果的每一條記錄封裝成指定的bean對象,將每個bean對象放入list中 返回.

   (瞭解)ColumnListHandler, 將查詢結果的指定一列放入list中返回 

   (瞭解)MapHandler, 將查詢結果的第一條記錄封裝成map,字段名做爲key,值爲value 返回

   ★MapListHandler, 將查詢結果的每一條記錄封裝map集合,將每個map集合放入list中返回

   ★ScalarHandler,針對於聚合函數 例如:count(*) 返回的是一個Long值

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//////////////////////////////////

上午回顧:

jdbc:

 java語言操做數據庫

 jdbc是oracle公司指定的一套規範,

 驅動:jdbc的實現類,由數據庫廠商提供.

jdbc操做步驟:

 1.導入驅動jar包

 2.註冊驅動

 3.獲取鏈接

 4.編寫sql

 5.獲取語句執行者

  PreparedStatement st=conn.prepareStatement(sql);

 6.設置參數

  st.setXxx(int 第幾個問號,Object 實參);

 7.執行sql

  ResultSet rs=st.executeQuery();

  int i=st.executeUpdate();

 8.處理結果

  如果resultset

   while(rs.next()){

    rs.getXxx(int|String)

   }

 9.釋放資源

////////////////////////////////////////

獲取src目錄下的properties格式的配置文件

 ResourceBundle bundle=ResourceBundle.getBundle("不帶後綴名的文件名");

 String value = bundle.getString("key"); 

////////////////////////

自定義鏈接池:

加強方法:

 1.繼承

 2.裝飾者模式(靜態代理)

 3.動態代理

///////////////

裝飾者模式(靜態代理)

 1.裝飾者和被裝飾者實現同一個接口或者繼承同一個類

 2.在裝飾者中要有被裝飾者的引用

 3.對須要加強的方法進行增強

 4.對不須要增強的方法調用原來方法

///////////////////

常見鏈接池:

 dbcp:

 c3p0:★

  配置文件:

   名稱:c3p0.properties或者 c3p0-config.xml

   位置:src下

  使用:

   new ComboPooledDataSource()

////////////////

dbutils:

 工具類,封裝了jdbc的操做.

 使用步驟:

  1.導入jar包

  2.建立queryrunner類

  3.編寫sql

  4.執行sql

queryrunner:操做sql語句

 構造器:

  new queryrunner()

 方法:

  query(..)

  update(..)

ResultSetHandler:封裝結果集

 BeanHandler

 BeanListHandler

 MapListHandler

 ScalarHandler

 

 

 

 

 

 

 

 

 

 

 

 

回顧:

sql

 sql分類:

  DDL:

   對象:數據庫和表

   關鍵詞:create alter drop truncate

   建立數據庫:create database day06;

   刪除數據庫: drop database day06;

   建立表:create table user(

    id int primark key auto_increment,

    username varchar(20)

   );

   

   修改表:

    alter table user rename to user10;

    alter table user add password varchar(20);

    alter table user change password pwd varchar(20);

    alter table user modify pwd int;

    alter table user drop pwd;

   

   刪除表:

    drop table user;

    

   經常使用的命令:

    use day06;

    show tables;

    desc user;

    show create table user;

   

  DML:

   對象:記錄(行)

   關鍵詞:insert update delete

   插入:

    insert into user values(字段值1,字段值2,...);-- 全部的字段

    insert into user(字段1,字段2....) values(字段值1,字段值2);-- 插入指定的字段

   更新:

    update user set 字段=字段值1,字段2=字段值2 where 條件;

   刪除:

    delete from user where 條件;

   擴展:

    之後開發中不多使用delete,數據無價,刪除有物理和邏輯(經常使用),

     邏輯刪除通常會在表中添加一個字段(isdel:若值爲1,表明刪除了;若爲0表明沒有刪除),

     此時的刪除操做變成了更新操做.

  DQL:

   select ... from 表名 where 條件 group by 分組字段 having 條件 order by 排序字段;

   執行順序:

    1.肯定數據來自那張表 from

    2.是否須要篩選 where 

    3.是否須要分組 group by

    4.分組後是否須要篩選 having

    5.是否須要排序 order by

    6.肯定顯示那些數據. select

  DCL:用戶 權限 事務

////////////////////////

auto_increment 自增

truncate 幹掉表,從新建立 和delete的區別

數據類型:

 int 和 varchar(size):可變長度

 date time datetime timestamp

////////////////////////////////////

多表的操做:

 表與表之間的關係:

  一對多:

   在多表的一方添加一個外鍵,外鍵的名稱通常是主表名稱_id,外鍵的類型和主表的主鍵的類型保持一致

   爲了保證數據的有效性和完整性,

    須要在多表上添加外鍵約束

     格式:

      alter table 多表 add [constraint [外鍵的名稱]] foreign key(外鍵名稱) references 主表名稱(主鍵);

  多對多:

   添加一張中間表,存放兩張表的主鍵,就能夠將多對多拆分紅兩個一對多了

   爲了保證數據的有效性和完整性,

    須要在中間表添加兩個外鍵約束

  一對一:(瞭解)

   1.兩個實體合二爲一(字段比較少)

   2.將一張表的主鍵添加外鍵約束便可

/////////////////////////////

多表的查詢:

 內鏈接:

  顯式:

   select a.*,b.* from a join b on 條件;

  隱式:

   select a.*,b.* from a,b where 條件;

 外鏈接:

  左外鏈接:

   select a.*,b.* from a left join b on 條件;

   以a爲主,展現全部數據,根據條件關聯查詢b表,知足條件則展現,不知足的話以null顯示

 子查詢::

  一個查詢依賴於另外一個查詢.

//////////////////////////////////////

案例1-經過jdbc完成單表的curd操做:

需求:

 對分類表完成操做.

技術分析:

 jdbc

///////////////////////

jdbc:

 java操做數據庫.jdbc是oracle公司指定的一套規範(一套接口)

 驅動:jdbc的實現類.由數據庫廠商提供.

 咱們就能夠經過一套規範操做不一樣的數據庫了(多態)

 jdbc做用:

  鏈接數據庫

  發送sql語句

  處理結果

 

jdbc操做步驟:★

 1.數據庫和表

 2.建立一個項目

 3.導入驅動jar包

 4.編碼:

  註冊驅動

  獲取鏈接

  編寫sql

  建立預編譯的語句執行者

  設置參數

  執行sql

  處理結果

  釋放資源

 

 初始化數據庫和表:

  CREATE DATABASE day07;

  USE day07; 

  

  create table category(

   cid varchar(20) primary key,

   cname varchar(20)

  );

  

  insert into category values('c001','電器');

  insert into category values('c002','服飾');

  insert into category values('c003','化妝品');

  insert into category values('c004','書籍');

 

 IDE打開以後

  1.修改字符集 utf-8

  2.新建 java項目

  3.使用的jdk爲本身的jdk 不用使用內置

 

 使用junit單元測試

  要求:

   1.方法是public void xxx(){}

   2.在方法上添加 @Test

   3.在@Test 按下 ctrl+1(快速鎖定錯誤)

   4.在方法上右鍵 run as -->junit 就能夠執行方法了.

jdbc-api詳解:

 全部的包 都是 java.sql 或者 javax.sql

 

 DriverManager:管理了一組jdbc的操做 類

  經常使用方法:

   瞭解:註冊驅動 

    static void registerDriver(Driver driver) :

     經過查看 com.mysql.jdbc.Driver的源碼 有以下代碼

       static {

       try {

        java.sql.DriverManager.registerDriver(new Driver());//這段代碼咱們已經寫過

       } catch (SQLException E) {

        throw new RuntimeException("Can't register driver!");

       }

      }

     驅動註冊了兩次.咱們只須要將靜態代碼塊執行一次,類被加載到內存中會執行靜態代碼塊,而且只執行一次.

     如今只須要將類加載到內存中便可:

      方式1:

       ★Class.forName("全限定名");//包名+類名 com.mysql.jdbc.Driver

      方式2:

       類名.class;

      方式3:

       對象.getClass();

 

   掌握:獲取鏈接

    static Connection getConnection(String url, String user, String password) 

     參數1:告訴咱們鏈接什麼類型的數據庫及鏈接那個數據庫

        協議:數據庫類型:子協議 參數

      mysql: jdbc:mysql://localhost:3306/數據庫名稱

      oracle: jdbc:oracle:thin@localhost:1521@實例

      

     參數2:帳戶名 root

     參數3:密碼

 

 

 (瞭解)Driver:java.sql 接口 驅動

 Connection:鏈接 接口

  經常使用方法:

   獲取語句執行者:

    (瞭解)Statement createStatement() :獲取普通的語句執行者 會出現sql注入問題

    ★PreparedStatement prepareStatement(String sql) :獲取預編譯語句執行者

    (瞭解)CallableStatement prepareCall(String sql):獲取調用存儲過程的語句執行者

 

   瞭解:

    setAutoCommit(false) :手動開啓事務

    commit():提交事務

    rollback():事務回滾

 

 Statement:語句執行者 接口

 PreparedStatement:預編譯語句執行者 接口

  經常使用方法:

   設置參數:

    setXxx(int 第幾個問號,Object 實際參數);

     常見的方法:

       setInt

       setString

       setObject

   

   執行sql:

     ResultSet executeQuery() :執行 r 語句 返回值:結果集

     int executeUpdate() :執行cud 語句 返回值:影響的行數

 

 

 ResultSet:結果集 接口

  執行查詢語句以後返回的結果

   經常使用方法:

    boolean next():判斷是否有下一條記錄,如有返回true且將光標移到下一行,若沒有呢則返回false

     光標一開始處於第一條記錄的上面

    

    獲取具體內容

     getXxx(int|string)

      若參數爲int :第幾列

      若參數爲string:列名(字段名)

     例如:

      獲取cname的內容能夠經過

       getString(2)

       getString("cname")

     經常使用方法:

      getInt

      getString 也能夠獲取int值

      getObject 能夠獲取任意

///////////////////////

常見的配置文件格式:

 1.properties

  裏面內容的格式 key=value

 2.xml

/////////////////

若咱們的配置文件爲properties,而且放在src目錄下.

咱們能夠經過 ResourceBundle工具快速獲取裏面的配置信息

 使用步驟:

  1.獲取ResourceBundle 對象:

   static ResourceBundle getBundle("文件名稱不帶後綴名") 

  2.經過ResourceBundle 對象獲取配置信息 

   String getString(String key) :經過執行key獲取指定的value

//////////////////////

案例2-經過鏈接池(數據源)優化咱們的操做.

需求:

 使用jdbc的時候,沒操做一次都須要獲取鏈接(建立)用完以後把鏈接釋放掉了(銷燬),經過鏈接池來優化curd操做.

技術分析:

 鏈接池

////////////////////

鏈接池概述:

 管理數據庫的鏈接,

 做用:

  提升項目的性能.

 就是在鏈接池初始化的時候存入必定數量的鏈接,用的時候經過方法獲取,不用的時候歸還鏈接便可.

 全部的鏈接池必須實現一個接口 javax.sql.DataSource接口

 

 獲取鏈接方法:

  Connection getConnection() 

 歸還鏈接的方法就是之前的釋放資源的方法.調用connection.close();

自定義一個鏈接池(理解思想)

 

經常使用鏈接池:

 DBCP

 C3P0

///////////////////

增前方法

 1.繼承

 2.裝飾者模式(靜態代理)

 3.動態代理

//////////////

裝飾者模式:★★★

 使用步驟:

  1.裝飾者和被裝飾者實現同一個接口或者繼承同一個類

  2.裝飾者中要有被裝飾者的引用

  3.對須要加強的方法進行增強

  4.對不須要增強的方法調用原來方法

 ////////////////////////////////////

 經常使用的鏈接池:

 DBCP:(理解)

  apache組織

  使用步驟:

   1.導入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

   2.使用api

    a.硬編碼

     //建立鏈接池

     BasicDataSource ds = new BasicDataSource();

     

     //配置信息

     ds.setDriverClassName("com.mysql.jdbc.Driver");

     ds.setUrl("jdbc:mysql:///day07");

     ds.setUsername("root");

     ds.setPassword("1234");

    b.配置文件

     實現編寫一個properties文件

     //存放配置文件

     Properties prop = new Properties();

     prop.load(new FileInputStream("src/dbcp.properties"));

     //設置

     //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");

     

     //建立鏈接池

     DataSource ds = new BasicDataSourceFactory().createDataSource(prop);

 C3P0:(★)

  hibernate和spring使用

  有自動回收空閒鏈接的功能.

  使用步驟:

   1.導入jar包(c3p0-0.9.1.2.jar)

   2.使用api

    a.硬編碼(不推薦)

     new ComboPooledDataSource()

    b.配置文件

     配置文件的名稱:c3p0.properties 或者 c3p0-config.xml

     配置文件的路徑:src下

    

     編碼只須要一句話

      new ComboPooledDataSource()//使用默認的配置

      new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默認的配置

      

////////////////////////////

案例3-使用dbutils完成curd操做

技術分析:

 dbutils

dbutils:

 是apache組織的一個工具類,jdbc的框架,更方便咱們使用

 使用步驟:

  1.導入jar包(commons-dbutils-1.4.jar)

  2.建立一個queryrunner類

   queryrunner做用:操做sql語句

    構造方法:

     new QueryRunner(Datasource ds);

  3.編寫sql

  4.執行sql

   query(..):執行r操做

   update(...):執行cud操做

////////////////////////////

核心類或接口

 QueryRunner:類名

  做用:操做sql語句

  構造器:

   new QueryRunner(Datasource ds);

  注意:

   底層幫咱們建立鏈接,建立語句執行者 ,釋放資源.

  經常使用方法:

   query(..):

   update(..):

 

 DbUtils:釋放資源,控制事務 類

  closeQuietly(conn):內部處理了異常

  commitAndClose(Connection conn):提交事務並釋放鏈接

  ....

 

 ResultSetHandler:封裝結果集 接口

  

   ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler

   

   (瞭解)ArrayHandler, 將查詢結果的第一條記錄封裝成數組,返回

   (瞭解)ArrayListHandler, 將查詢結果的每一條記錄封裝成數組,將每個數組放入list中返回

   ★★BeanHandler, 將查詢結果的第一條記錄封裝成指定的bean對象,返回

   ★★BeanListHandler, 將查詢結果的每一條記錄封裝成指定的bean對象,將每個bean對象放入list中 返回.

   (瞭解)ColumnListHandler, 將查詢結果的指定一列放入list中返回 

   (瞭解)MapHandler, 將查詢結果的第一條記錄封裝成map,字段名做爲key,值爲value 返回

   ★MapListHandler, 將查詢結果的每一條記錄封裝map集合,將每個map集合放入list中返回

   ★ScalarHandler,針對於聚合函數 例如:count(*) 返回的是一個Long值

  

  

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//////////////////////////////////

上午回顧:

jdbc:

 java語言操做數據庫

 jdbc是oracle公司指定的一套規範,

 驅動:jdbc的實現類,由數據庫廠商提供.

jdbc操做步驟:

 1.導入驅動jar包

 2.註冊驅動

 3.獲取鏈接

 4.編寫sql

 5.獲取語句執行者

  PreparedStatement st=conn.prepareStatement(sql);

 6.設置參數

  st.setXxx(int 第幾個問號,Object 實參);

 7.執行sql

  ResultSet rs=st.executeQuery();

  int i=st.executeUpdate();

 8.處理結果

  如果resultset

   while(rs.next()){

    rs.getXxx(int|String)

   }

 9.釋放資源

////////////////////////////////////////

獲取src目錄下的properties格式的配置文件

 ResourceBundle bundle=ResourceBundle.getBundle("不帶後綴名的文件名");

 String value = bundle.getString("key"); 

////////////////////////

自定義鏈接池:

加強方法:

 1.繼承

 2.裝飾者模式(靜態代理)

 3.動態代理

///////////////

裝飾者模式(靜態代理)

 1.裝飾者和被裝飾者實現同一個接口或者繼承同一個類

 2.在裝飾者中要有被裝飾者的引用

 3.對須要加強的方法進行增強

 4.對不須要增強的方法調用原來方法

///////////////////

常見鏈接池:

 dbcp:

 c3p0:★

  配置文件:

   名稱:c3p0.properties或者 c3p0-config.xml

   位置:src下

  使用:

   new ComboPooledDataSource()

////////////////

dbutils:

 工具類,封裝了jdbc的操做.

 使用步驟:

  1.導入jar包

  2.建立queryrunner類

  3.編寫sql

  4.執行sql

queryrunner:操做sql語句

 構造器:

  new queryrunner()

 方法:

  query(..)

  update(..)

ResultSetHandler:封裝結果集

 BeanHandler

 BeanListHandler

 MapListHandler

 ScalarHandler

相關文章
相關標籤/搜索