欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中PreparedStatement的用法解析

 更新時間:2023年09月11日 11:26:51   作者:silmeweed  
這篇文章主要介紹了Java中PreparedStatement的用法解析,在JDBC應用中,PreparedStatement是一種比Statement更好的選擇,PreparedStatement可以通過使用參數(shù)化查詢來避免SQL注入攻擊,并且可以提高查詢性能,需要的朋友可以參考下

一、 簡介:

JDBC的最基本的使用過程

  • 加載驅動類:Class.forName()
  • 獲取數(shù)據(jù)庫連接:DriverManager.getConnection()
  • 創(chuàng)建SQL語句執(zhí)行句柄:Connection.createStatement()
  • 執(zhí)行SQL語句:Statement.executeUpdate()
  • 釋放數(shù)據(jù)庫連接資源:finally,Connection.close()

應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement.原因如下。

1. 代碼的可讀性和可維護性

??stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();

2. 盡最大可能提高性能

整個DB中,只要預編譯的語句語法和緩存中匹配,而statement的語句中,即使是相同一操作,而由于每次操作的數(shù)據(jù)不同所以使整個語句相匹配的機會極小,幾乎不太可能匹配

二、PreparedStatement用法:

一個preparedstatement是從java.sql.connection對象和所提供的sql字符串得到的,sql字符串中包含問號(?),這些問號標明變量的位置,然后提供變量的值,最后執(zhí)行語句,例如:

stringsql = "select * from people p where p.id = ? and p.name = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,name);
resultset rs = ps.executequery();
 private static void preparedStatement() {
        // 總結一下JDBC的最基本的使用過程
        // 1、加載驅動類:Class.forName()
        // 2、獲取數(shù)據(jù)庫連接:DriverManager.getConnection()
        // 3、創(chuàng)建SQL語句執(zhí)行句柄:Connection.createStatement()
        // 4、執(zhí)行SQL語句:Statement.executeUpdate()
        // 5、釋放數(shù)據(jù)庫連接資源:finally,Connection.close()
        // 定義數(shù)據(jù)庫連接對象
        // 引用JDBC相關的所有接口或者是抽象類的時候,必須是引用java.sql包下的
        // java.sql包下的,才代表了java提供的JDBC接口,只是一套規(guī)范
        // 至于具體的實現(xiàn),則由數(shù)據(jù)庫驅動來提供,切記不要引用諸如com.mysql.jdbc包的類
        Connection conn=null;
        //定義SQL語句執(zhí)行句柄:PrepareStatement對象
        //PreparedStatement對象,其實就是底層會基于Connection數(shù)據(jù)庫連接
        //可以讓我們方便的針對數(shù)據(jù)庫中的表,執(zhí)行增刪改查的SQL語句
        //比如和insert update delete和select語句
        PreparedStatement ps=null;
        try {
            // 第一步,加載數(shù)據(jù)庫的驅動,我們都是面向java.sql包下的接口在編程,所以
            // 要想讓JDBC代碼能夠真正操作數(shù)據(jù)庫,那么就必須第一步先加載進來你要操作的數(shù)據(jù)庫的驅動類
            // 使用Class.forName()方式來加載數(shù)據(jù)庫的驅動類
            // Class.forName()是Java提供的一種基于反射的方式,直接根據(jù)類的全限定名(包+類)
            // 從類所在的磁盤文件(.class文件)中加載類對應的內(nèi)容,并創(chuàng)建對應的Class對象
            Class.forName("com.mysql.jdbc.Driver");
            // 獲取數(shù)據(jù)庫的連接
            // 使用DriverManager.getConnection()方法獲取針對數(shù)據(jù)庫的連接
            // 需要給方法傳入三個參數(shù),包括url、user、password
            // 其中url就是有特定格式的數(shù)據(jù)庫連接串,包括“主協(xié)議:子協(xié)議://主機名:端口號//數(shù)據(jù)庫”
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/spark_project?characterEncoding=utf8",
                    "root",
                    "root"
            );
            // 基于數(shù)據(jù)庫連接Connection對象,創(chuàng)建SQL語句執(zhí)行句柄,Statement對象
            // prepareStatement對象,就是用來基于底層的Connection代表的數(shù)據(jù)庫連接
            // 允許我們通過java程序,通過prepareStatement對象,向MySQL數(shù)據(jù)庫發(fā)送SQL語句
            // 從而實現(xiàn)通過發(fā)送的SQL語句來執(zhí)行增刪改查等邏輯
            // 第一個,SQL語句中,值所在的地方,都用問好代表
            String sql = "insert into user(name,age) values(?,?)";
            ps = conn.prepareStatement(sql);
            // 第二個,必須調(diào)用PreparedStatement的setX()系列方法,對指定的占位符設置實際的值
            ps.setString(1,"李四");
            ps.setInt(2,26);
            // Statement.executeUpdate()方法,就可以用來執(zhí)行insert、update、delete語句
            // 返回類型是個int值,也就是SQL語句影響的行數(shù)
            // 第三個,執(zhí)行SQL語句時,直接使用executeUpdate()即可,不用傳入任何參數(shù)
            int rtn = ps.executeUpdate();
            System.out.println("SQL語句影響了【" + rtn + "】行。");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                // 最后一定要記得在finally代碼塊中,盡快在執(zhí)行完SQL語句之后,就釋放數(shù)據(jù)庫連接
                if (ps != null){
                    ps.close();
                }
                if (conn !=null){
                    conn.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

到此這篇關于Java中PreparedStatement的用法解析的文章就介紹到這了,更多相關PreparedStatement用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論