一。查詢語句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方法得到自增字段的值,但若是執行多條插入語句,只返回第一條插入語句生成的自增字段的值。