Oracle先行編譯的SQL語句處理

來源:互聯網
上載者:User

一、先行編譯的SQL語句處理

先行編譯語句PreparedStatement 是java.sql中的一個介面,它是Statement的子介面。通過Statement對象執行SQL語句時,需要將SQL語句發送給DBMS,由DBMS首先進行編譯後再執行。先行編譯語句和Statement不同,在建立PreparedStatement 對象時就指定了SQL語句,該語句立即發送給DBMS進行編譯。當該編譯語句被執行時,DBMS直接運行編譯後的SQL語句,而不需要像其他SQL語句那樣首先將其編譯。先行編譯的SQL語句處理效能稍微高於普通的傳遞變數的辦法。

 二、先行編譯語句的作用

·提高效率:當需要對資料庫進行資料插入、更新或者刪除的時候,程式會發送整個SQL語句給資料庫處理和執行。資料庫處理一個SQL語句,需要完成解析SQL語句、檢查文法和語義以及產生代碼;www.bkjia.com一般說來,處理時間要比執行語句所需要的時間長。先行編譯語句在建立的時候已經是將指定的SQL語句發送給了DBMS,完成瞭解析、檢查、編譯等工作。因此,當一個SQL語句需要執行多次時,使用先行編譯語句可以減少處理時間,提高執行效率。

·提高安全性:假如有惡意的SQL語句:String sql = "select * from t_student where name= '"+varname+"' and passwd='"+varpasswd+"'";如果我們把" or '1' = '1' "作為varpasswd傳入進來.使用者名稱隨意,看看會成為什麼?
select * from t_student = '隨意' and passwd = '' or '1' = '1'; 因為'1'='1'肯定成立,所以可以任何通過驗證.更有甚者:把" ';drop table t_student;"作為varpasswd傳入進來,則:select * from tb_name = '隨意' and passwd = '';drop table tb_name;有些資料庫是不會讓你成功的,但也有很多資料庫就可以使這些語句得到執行.而如果使用先行編譯語句.傳入的任何內容就不會和原來的語句發生任何匹配的關係.只要全使用先行編譯語句,就用不著對傳入的資料做任何過慮.而如果使用普通的statement,有可能要對drop,;等做費盡心機的判斷和過慮。

三、先行編譯語句的使用

1、建立 PreparedStatement 對象
       以下的程式碼片段(其中 conn 是 Connection 對象)建立包含帶4個 IN 參數預留位置的 SQL 陳述式的 PreparedStatement 對象:

       String sql = "insert into t_customer values(?,?,?,?)";//組織一條含有參數的SQL語句
  PreparedStatement ps = conn.prepareStatement(sql);
  ps對象包含語句 insert into t_customer values(?,?,?,?),它已發送給DBMS,並為執行作好了準備。
2、傳遞 IN 參數
    在執行 PreparedStatement 對象之前,必須設定每個 ? 參數的值。這可通過調用 setXXX 方法來完成,其中 XXX 是與該參數相應的類型。例如,如果參數具有Java 類型 long,則使用的方法就是 setLong。setXXX 方法的第一個參數是要設定的參數的序數位置,第二個參數是設定給該參數的值。例如,以下代碼將第一個參數設為 輸進來的account,第二個參數設為 password:
  ps.setString(1, account);
  ps.setString(2, password);
一旦設定了給定語句的參數值,其值將一直保留,直到被設定為新值或者調用clearParameters()方法清除它為止。代碼如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.