JDBC語句

一。查詢語句java

1)使用executeQuery單個查詢數據sql

    該方法用於執行產生單個結果集的SQL語句,不能執行insert、update、delete等單一DDL語句(create、drop等)。若是執行這些語句將會拋出SQLException異常。但當執行多條語句時,能夠執行DDL語句,但第一條語句必須是返回結果集的SQL語句,後面跟着的是其餘的任何SQL語句。數據庫

    方法定義爲:ResultSet executeQuery(String sql) 。經過對返回的對象來訪問查詢結果集,最經常使用的操做是掃描結果集,可使用ResultSet的next方法,返回的「遊標」處於結果集的第一個對象的上面,沒有指向第一個對象。主要完成兩個任務:spa

    1.判斷是否還有下一條記錄。若是有返回true。
指針

    2.若是有下一條記錄,將當前記錄指針後移一個位置。(code

    在讀數據時能夠根據列索引和列名來讀取字段。getXxx(String xx)。
對象

    在某些狀況下並不須要獲得所有的查詢結果,可使用Statement接口的setMaxRows方法限制返回的記錄數。此外還可使用getMaxRows方法得到最大返回記錄數。索引

   ResultSet其餘功能:接口

   wasNull方法:判斷最後一次使用getXxx方法讀取的字段值是否爲NULL。字符串

   findColumn方法:獲取某個列名在列集合中的位置。

2)使用execute執行單個查詢語句

 execute能夠執行任何SQL語句,並不直接返回ResultSet對象,方法以下:

     boolean execute(String sql)

    經過boolean的值肯定執行的是返回結果集的SQL語句(select),仍是不返回結果集的語句。若是返回true,能夠經過Statement接口的getResultSet方法返回ResultSet對象。若是返回false,能夠經過getUpdateCount方法返回被影響的記錄數。此外,也能夠直接經過getResultSet方法的返回值判斷執行的是何種語句。

if(stmt.execute(...)){
    ResultSet rs = stmt.getResultSet();
    while(rs.next()){
        ...
    }
}

3)處理多個結果集ResultSet

    execute方法不只能夠執行單條查詢語句,並且還能夠執行多條查詢語句,不一樣查詢語句之間用分號(;)隔開。

    1.當JDBC執行多條查詢語句時(所有都是select語句)

    處理全部的結果集需使用ResultSet接口的getMoreResults方法來判斷是否存在下一個結果集。

    execute方法只根據多條sql語句中的第一條的類型來返回ture或false。若是第一條是查詢語句,責getResultSet返回一個ResultSet對象,execute方法返回true。不然返回false.所以,在已知語句所有都是select語句時,能夠不用判斷。但若是是混合形式的,則須要採起2方法。

    2.當執行混合形式的語句

    方法見 「 二。對數據庫進行更新」

    boolean getMoreResults()

    該方法與next()方法不一樣,該方法返回的「遊標」位置就處於第一個結果集上。需使用do...while()語句。

if(stmt.execute()){
    ResultSet rs = null;
    do{
    //依次得到執行多條sql語句返回的ResultSet對象
        rs = stmt.getResultSet();
        while(rs.next()){
        ..
        }
    }while(stmt.getMoreResults());
}

   須要注意的是:MySQL JDBC驅動不支持多結果集,所以要想使用execute方法執行多條查詢SQL語句,必須在鏈接字符串中加上allowMultiQueries=true。

二。對數據庫進行更新

    對數據庫的另外一重要操做就是更新數據庫,主要包括插入數據(insert語句)、更新數據(update語句)和刪除數據(delete語句)。執行方法有execute()方法、executeUpdate()方法

1)使用execute方法執行混合形式的SQL語句

    execute方法不只能夠執行查詢語句,也能夠執行不返回結果集的查詢語句(DML),並能夠同時執行上述語句的混合形式。各語句之間用分號隔開。如stmt.execute(insertDate + ";" + "insertData" + ";" + "selectData");

    結果處理方法:

    不能使用execute方法的返回值或getMoreResults方法來處理每條SQL語句的執行結果。需使用getUpdateCount方法,該方法根據執行的語句不一樣而返回不一樣的值:

    1.若是當前執行的是返回結果集的SQL語句,返回-1.

    2.不然返回實際的更新記錄數。

    只有當getMoreResults方法返回false,而且getUpdateCount方法返回-1時,才代表全部的結果都被處理了。

do{

}while(!(stmt.getMoreResults()==false)&&stmt.getUpdateCount()==-1));

2)使用executeUpdate方法更新數據

    除了可使用execute方法執行不返回結果集的SQL語句外,還可使用executeUpdate方法來完成一樣的工做。

    int executeUpdate(String sql)

    executeUpdate方法和executeQuery方法相似,當執行多條語句時,第一條語句必須是不返回結果集的SQL語句。

3)得到自增字段的值

    Statement接口的getGeneratedKeys方法,能夠得到最近一次插入數據後自增字段的值。

    ResulteSet getGeneratedKeys()

   當插入多條記錄時,能夠經過對ResultSet掃描得到。

    也能夠經過execute方法和executeUpdate方法得到自增字段的值,但若是執行多條插入語句,只返回第一條插入語句生成的自增字段的值。

相關文章
相關標籤/搜索