国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java與數(shù)據(jù)庫(kù) —— JDBC標(biāo)準(zhǔn)

lastSeries / 462人閱讀

摘要:由來(lái)與描述沒(méi)有前開(kāi)發(fā)者想操作數(shù)據(jù)庫(kù),必須需要了解每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,由于每個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的都不同,所以當(dāng)需要遷移數(shù)據(jù)庫(kù)時(shí),根本不平滑,需要大量修改與重寫(xiě)有了后公司也知道問(wèn)題之后,就提出一種約束規(guī)范,讓所有數(shù)據(jù)庫(kù)廠商都按照這個(gè)規(guī)

JDBC由來(lái)與描述

沒(méi)有JDBC前

開(kāi)發(fā)者想操作數(shù)據(jù)庫(kù),必須需要了解每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序API,由于每個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的API都不同,所以當(dāng)需要遷移數(shù)據(jù)庫(kù)時(shí),根本不平滑,需要大量修改與重寫(xiě)

有了JDBC后

Sum公司也知道問(wèn)題之后,就提出一種約束 —— JDBC規(guī)范,讓所有數(shù)據(jù)庫(kù)廠商都按照這個(gè)JDBC規(guī)范來(lái)開(kāi)發(fā)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,以便于Java程序能用統(tǒng)一方式操作不同的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)遷移變成可行

JDBC描述

JDBC是一種Java web的規(guī)范,需要具體開(kāi)發(fā)者(數(shù)據(jù)庫(kù)廠商)來(lái)實(shí)現(xiàn)
JDBC常用四大API

DriverManager

作用:
1、注冊(cè)驅(qū)動(dòng)
Class.forName("com.jdbc.mysql.Driver");

2、獲取連接
Connection conn = DriverManager.getConnection();

Connection

作用:
1、創(chuàng)建執(zhí)行SQL語(yǔ)句的對(duì)象(3種)
Statement createStatement()    // 執(zhí)行SQL語(yǔ)句
PreparedStatement prepareStatement()   // 預(yù)編譯SQL并執(zhí)行
CallableStatement prepareCall()    // 執(zhí)行SQL存儲(chǔ)過(guò)程

2、進(jìn)行事務(wù)管理
setAutoCommit(boolean b)
commit()
rollback()

Statement

作用:
1、執(zhí)行SQL語(yǔ)句
boolean execute(String sql)   // 執(zhí)行SQL語(yǔ)句,執(zhí)行select就返回true,否則返回false
ResultSet executeQuery(String sql)     // 執(zhí)行SQL中的select語(yǔ)句
int executeUpdate(String sql)          // 執(zhí)行SQL中的insert/update/delete語(yǔ)句

2、執(zhí)行批量SQL語(yǔ)句
addBatch(String sql)    // 添加到批量處理
executeBatch()          // 執(zhí)行批量處理
clearBatch()            // 清空批量處理

ResultSet

(select語(yǔ)句)查詢結(jié)果的集合
作用:獲取到查詢的結(jié)果
next()           //判斷是否有下一條數(shù)據(jù)
getXXX()         //根據(jù)數(shù)據(jù)類型獲取查詢記錄的數(shù)據(jù)
getObject()      //通用獲取數(shù)據(jù)方法
JDBC資源釋放
釋放原則:晚創(chuàng)建,早釋放;資源稀有,不釋放很快會(huì)阻塞
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");

rs.close();
stmt.close();
conn.close();
JDBC CURD操作

增加

Connection conn = null;
Statement stmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    stmt = conn.createStatement();
    // 編寫(xiě)SQL
    String sql = "insert into user values ("xiaomin","女人",12)";
    // 執(zhí)行SQL語(yǔ)句
    int i = stmt.executeUpdate(sql);
    if(i > 0){
        System.out.println("插入成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(stmt != null){
        try{
            stmt .close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            stmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

更新

Connection conn = null;
Statement stmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    stmt = conn.createStatement();
    // 編寫(xiě)SQL
    String sql = "update user set name = "wt"";
    // 執(zhí)行SQL語(yǔ)句
    int i = stmt.executeUpdate(sql);
    if(i > 0){
        System.out.println("更新成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(stmt != null){
        try{
            stmt .close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            stmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

刪除

Connection conn = null;
Statement stmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    stmt = conn.createStatement();
    // 編寫(xiě)SQL
    String sql = "delete from user where id = 3";
    // 執(zhí)行SQL語(yǔ)句
    int i = stmt.executeUpdate(sql);
    if(i > 0){
        System.out.println("刪除成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(stmt != null){
        try{
            stmt .close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            stmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

查詢

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    stmt = conn.createStatement();
    // 編寫(xiě)SQL
    String sql = "select * from user";
    // 執(zhí)行SQL語(yǔ)句
    rs = stmt.executeQuery(sql);
    if(rs.next()){
        System.out.print(rs.getString("name"));
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(rs != null){
        try{
            rs .close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }
    if(stmt != null){
        try{
            stmt .close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            stmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}
JDBC SQL注入解決方案
開(kāi)發(fā)時(shí),使用 PreparedStatement對(duì)象 取代 Statement對(duì)象 來(lái)執(zhí)行SQL有效避免SQL注入

增加

Connection conn = null;
PreparedStatement pstmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 編寫(xiě)SQL
    String sql = "insert into user values (?,?,?)";
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    pstmt = conn.preparedStatement(sql);
    // 設(shè)置參數(shù)
    pstmt.setString(1, "qqq");
    pstmt.setString(2, "bbb");
    pstmt.setString(3, "ccc");
    // 執(zhí)行SQL語(yǔ)句
    int i = pstmt.executeUpdate();
    if(i > 0){
        System.out.println("插入成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(pstmt != null){
        try{
            pstmt.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            pstmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

更新

Connection conn = null;
PreparedStatement pstmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 編寫(xiě)SQL
    String sql = "update user set name = ?, age = ?, pwd = ? where id = ?";
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    pstmt = conn.preparedStatement(sql);
    // 設(shè)置參數(shù)
    pstmt.setString(1, "wt");
    pstmt.setString(2, 15);
    pstmt.setString(3, "basdcx");
    pstmt.setString(4, 10);
    // 執(zhí)行SQL語(yǔ)句
    int i = pstmt.executeUpdate();
    if(i > 0){
        System.out.println("更新成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(pstmt != null){
        try{
            pstmt.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            pstmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

刪除

Connection conn = null;
PreparedStatement pstmt = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 編寫(xiě)SQL
    String sql = "delete from user where id = ?";
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    pstmt = conn.preparedStatement(sql);
    // 設(shè)置參數(shù)
    pstmt.setString(1, 16);
    // 執(zhí)行SQL語(yǔ)句
    int i = pstmt.executeUpdate();
    if(i > 0){
        System.out.println("刪除成功!");
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
    if(pstmt != null){
        try{
            pstmt.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            pstmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

查詢

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try{
    // 注冊(cè)驅(qū)動(dòng)
    Class.forName("com.mysql.jdbc.Driver");
    // 獲得連接
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDB","root","root");
    // 編寫(xiě)SQL
    String sql = "select * from user where sex = ?";
    // 獲取執(zhí)行SQL語(yǔ)句對(duì)象
    pstmt = conn.preparedStatement(sql);
    // 設(shè)置參數(shù)
    pstmt.setString(1, "男");
    // 執(zhí)行SQL語(yǔ)句
    rs = pstmt.executeQuery();
    while(rs.next()){
        System.out.println(rs.getString("name"));
    }
}catch(Exception e){
    e.printStackTrace();
}finally{
     if(rs != null){
        try{
            rs.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }
    if(pstmt != null){
        try{
            pstmt.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            pstmt = null;
        }
    }
    if(conn != null){
        try{
            conn.close();
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}
連接池(數(shù)據(jù)源)JDBC優(yōu)化技術(shù)
數(shù)據(jù)庫(kù)連接頻繁創(chuàng)建與消耗,在資源使用上是一種浪費(fèi)

常用連接池

C3P0、HikariCP、Druid、Tomcat、Dbcp

用法(以C3P0為例)

ComboPooledDataSource dataSource = new ComboPooledDataSource();   // 只需一個(gè)對(duì)象
// 獲取連接
Connection conn = dataSource.getConnection();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72313.html

相關(guān)文章

  • Java學(xué)習(xí)】JDBC數(shù)據(jù)類型

    摘要:通過(guò)這個(gè)驅(qū)動(dòng)程序,我們就能夠兩個(gè)數(shù)據(jù)類型的相互轉(zhuǎn)化了。和和方法可以將特定的類型轉(zhuǎn)換為特定的數(shù)據(jù)類型。和可以將幾乎任何數(shù)據(jù)類型映射到數(shù)據(jù)類型。時(shí)間與日期類型類映射到類型,和類分別映射到和數(shù)據(jù)類型。 概述 我們知道Java的數(shù)據(jù)類型和數(shù)據(jù)庫(kù)中的類型并不是一一對(duì)應(yīng)的,我們?cè)谑褂肑DBC在與數(shù)據(jù)庫(kù)進(jìn)行交互的時(shí)候,比如我們向數(shù)據(jù)庫(kù)中插入一條數(shù)據(jù),或者從數(shù)據(jù)庫(kù)中查詢一個(gè)數(shù)據(jù),為什么我們能夠正常的讀...

    Vixb 評(píng)論0 收藏0
  • Java知識(shí)點(diǎn)總結(jié)(JDBC-概要)

    摘要:知識(shí)點(diǎn)總結(jié)概要知識(shí)點(diǎn)總結(jié)簡(jiǎn)介為開(kāi)發(fā)者使用數(shù)據(jù)庫(kù)提供了統(tǒng)一的編程接口,它由一組類和接口組成主要在包中。跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫(kù)和相應(yīng)的驅(qū)動(dòng)程序之間建立連接。接口與特定數(shù)據(jù)庫(kù)的連接會(huì)話,在連接上下文中執(zhí)行語(yǔ)句并返回結(jié)果。 Java知識(shí)點(diǎn)總結(jié)(JDBC-概要) @(Java知識(shí)點(diǎn)總結(jié))[Java, JDBC] 簡(jiǎn)介 JDBC(Java Database Connection)為Java...

    animabear 評(píng)論0 收藏0
  • JDBC干貨篇一

    摘要:干貨篇一基礎(chǔ)的全稱是,即數(shù)據(jù)庫(kù)連接,它是一種可以執(zhí)行語(yǔ)句的。將光標(biāo)移動(dòng)到上一行,如果超過(guò)結(jié)果集的范圍則返回。列索引從開(kāi)始,意味著行中的第一列是,第二列是,以此類推。 JDBC干貨篇一 JDBC基礎(chǔ) JDBC的全稱是Java Database Connectivity,即Java數(shù)據(jù)庫(kù)連接,它是一種可以執(zhí)行SQL語(yǔ)句的Java API。程序可通過(guò)JDBC API連接到關(guān)系數(shù)據(jù)庫(kù),并使用...

    hiyang 評(píng)論0 收藏0
  • 從懵逼到再入門(mén)——JavaEE完整體系架構(gòu)

    摘要:軟件開(kāi)發(fā)體系架構(gòu)兩層架構(gòu)傳統(tǒng)的客戶服務(wù)器系統(tǒng)僅只簡(jiǎn)單地基于兩層體系來(lái)構(gòu)建,即客戶端前臺(tái)和企業(yè)信息系統(tǒng)后臺(tái),沒(méi)有任何中間件,業(yè)務(wù)邏輯層與表示層或數(shù)據(jù)層混在一起。 showImg(https://segmentfault.com/img/remote/1460000007090113); 理想的建筑師應(yīng)該既是文學(xué)家又是數(shù)字家,他還應(yīng)通曉歷史,熱衷于哲學(xué)研究,精通音樂(lè),懂得醫(yī)藥知識(shí),具有法學(xué)...

    ZweiZhao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<