<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    雅典之夏的小站
    知人者智 自知者明 Fighting!!
    二、通過PreparedStatement對象訪問數據庫



    前面,我們討論了用連接對象Connection產生Statement對象,然后用Statement與數據庫管理系統進行交互。Statement對象在每次執行SQL語句時都將該語句傳遞給數據庫。在多次執行同一語句時,這樣做效率較低。解決這個問題的辦法是使用PreparedStatement對象。如果數據庫支持預編譯,可以在創建PreparedStatement對象時將SQL語句傳遞給數據庫做預編譯,以后每次執行這個SQL語句時,速度就可以提高很多。如果數據庫不支持預編譯,則在語句執行時,才將其傳給數據庫。這對于用戶來說是完全透明的。

    PreparedStatement對象的SQL語句還可以接受參數。在語句中指出需要接受那些參數,然后進行預編譯。在每一次執行時,可以將不同的參數傳遞給SQL語句,大大提高了程序的效率與靈活性。一般情況下,使用PreparedStatement對象都是帶輸入參數的。



    為了更好的理解,請看下面這個例子:



    package com.rongji.demo;



    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.Statement;

    import java.sql.DatabaseMetaData;

    import java.sql.PreparedStatement;





    public class DataConn {

    public DataConn() {

    }

    public static void main(String[] args) {

    try

    {

    //加載驅動程序

    //下面的代碼為加載JDBD-ODBC驅動程序

    Class.forName("oracle.jdbc.driver.OracleDriver");

    //建立連接

    //第二步是用適當的驅動程序連接到DBMS,看下面的代碼[自行修改您所連接的數據庫相關信息]:

    String url="jdbc:oracle:thin:@192.168.4.45:1521:oemrep";

    String user = "ums1";

    String password = "rongji";

    //用url創建連接

    Connection con=DriverManager.getConnection(url,user,password);

    //當前的表中有如下幾個字段:ID,NAME,PASSWORD,TEXT,NOTE

    PreparedStatement insertStatement = con.prepareStatement(

    "INSERT INTO rbac_application values(?,?,?,?,?)");

    insertStatement.setInt(1,10);

    insertStatement.setString(2,"thinkersky");

    insertStatement.setString(3,"88888");

    insertStatement.setString(4,"這是個測試的應用程序");

    insertStatement.setString(5,"備注");

    int result = insertStatement.executeUpdate();

    System.out.println("the result is" + result);

    con.close();

    }

    catch (Exception e)

    {

    //輸出異常信息

    System.err.println("SQLException :"+e.getMessage());

    e.printStackTrace();

    }

    }

    }



    相信通過這個例子,對PreparedStatement這個類的應用應該有了初步的了解。恩,讓我詳細介紹一下這個例子吧:)

    1、 創建一個PreparedStatement對象



    PreparedStatement類是Statement類的子類。同Statemetn類一樣,PreparedStatement類的對象也是建立在Connection對象之上的。如下所示:

    PreparedStatement insertStatement = con.prepareStatement(

    "INSERT INTO rbac_application values(?,?,?,?,?)");

    創建該PreparedStatement對象時,相應的插入記錄的SQL語句已經被傳遞到數據庫管理系統中進行預編譯。



    2、 為PreparedStatement對象提供參數



    如果以帶輸入參數的SQL語句形式創建了一個PreparedStatement對象(絕大多數情況下都是如此)。在SQL語句被數據庫管理系統正確執行之前,必須為參數(也就是SQL語句中是’?’的地方)進行初始化。初始化的方法是調用PreparedStatement類的一系列setXXX()方法。如果輸入參數的數據類型是int型,則調用setInt()方法;如果輸入參數是String型,則調用setString()方法。一般說來,Java中提供的簡單和復合數據類型,都可以找到相應的setXXX()方法。

    現在,讓我們再回頭看看我們例子中對幾個參數的初始化情況:

    insertStatement.setInt(1,10);

    insertStatement.setString(2,"thinkersky");

    insertStatement.setString(3,"88888");

    insertStatement.setString(4,"這是個測試的應用程序");

    insertStatement.setString(5,"備注");

    這里,setXXX()方法一般有兩個參數,第一個參數都是int型,該參數指示JDBC PreparedStatement對象的第幾個參數將要被初始化。第二個參數的值就是PreparedStatemetn將要被初始化的參數取值,數據類型自然也就相同。這里要說明的是當PreparedStatement的一個對象的參數被初始化以后,該參數的值一直保持不變,直到他被再一次賦值為止。



    3、 調用PreparedStatement對象的executeUpdate()方法



    這里,要清楚PreparedStatement對象的executeUpdate()方法不同于Statement對象的executeUpdate()方法,前者是不帶參數的,其所需要的SQL語句型的參數已經在實例化該對象時提供了。另外,executeUpdate()方法將返回一個整數,這個整數代表executeUpdate()方法執行后所更新的數據庫中記錄的行數。執行完上面的例子,其結果返回為1。那么什么情況下返回0呢?其實啊,當PreparedStatement對象的executeUpdate()方法的返回值是0時。有兩種可能:

    (1) 所執行的SQL語句是對數據庫管理系統的記錄進行操作;并且沒有記錄被 更新

    (2) 所執行的SQL語句是對數據庫管理系統的表、視圖等對象進行操作的DDL語言,沒有數據記錄被直接修改。
    posted on 2005-10-27 12:52 rkind 閱讀(1816) 評論(1)  編輯  收藏 所屬分類: JAVA基礎&數據庫

    FeedBack:
    # re: jdbc 學習筆記3(PreparedStatement對象) [未登錄]
    2010-10-21 16:12 | 無名
    很詳細,很好,頂  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品国产精品| 麻豆一区二区免费播放网站| 国产免费爽爽视频在线观看| 亚洲黄黄黄网站在线观看| 亚洲av无码成人精品区一本二本 | 国产精品亚洲产品一区二区三区| 最新亚洲精品国偷自产在线| 免费A级毛片无码免费视| 亚洲夂夂婷婷色拍WW47| 女性自慰aⅴ片高清免费| 亚洲国产午夜精品理论片在线播放| 女人被男人躁的女爽免费视频| 色偷偷亚洲第一综合| 免费中文字幕在线观看| jizz免费在线观看| 久久久久久亚洲精品| 曰批视频免费30分钟成人| 亚洲字幕AV一区二区三区四区| 国产成人免费ā片在线观看老同学 | yy6080久久亚洲精品| 曰批全过程免费视频观看免费软件| 亚洲区日韩区无码区| 中国在线观看免费的www| 日韩亚洲AV无码一区二区不卡| 曰曰鲁夜夜免费播放视频 | 在线精品亚洲一区二区小说| 国产日韩AV免费无码一区二区 | 亚洲av日韩综合一区久热| 免费观看国产小粉嫩喷水| 最近更新免费中文字幕大全| 亚洲网址在线观看| 又粗又大又猛又爽免费视频| 国产午夜不卡AV免费| 亚洲一区二区三区精品视频| 国产精品成人四虎免费视频| 中文字幕看片在线a免费| 亚洲AV色吊丝无码| 中文字幕中韩乱码亚洲大片| 91免费国产精品| 在线观看免费亚洲| 亚洲国产成人私人影院|