一.資料庫連接 (前面為jdbc的其他參數,文章下部分為ResultSet詳解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多種資料庫連接,不同的資料庫需要使用不同的資料庫連接驅動,驅動來自於資料庫廠商; 2. 主要需要四個參數,一個 ...
一.資料庫連接
(前面為jdbc的其他參數,文章下部分為ResultSet詳解)
ResultSet rs = st.executeQuery(sqlStr)
- driverClass:驅動信息
- url:資料庫連接參數
- user:用戶名
- password:密碼
二.介面
1.Connection介面- Connection介面代表著與資料庫的鏈接
返回類型 | 方法 | 功能描述 |
Statement | createStatment() | 創建一個Statment對象 |
Statement | createStatment(int resultSetType,int resultSetConcurrency) | 創建一個statment對象,該對象將生成具有給定類型併發性,和可保存的ResultSet對象 |
PrepareStatement | prepareStatement() | 創建預處理對象prepardStatement |
CallableStatement | prepareCall(String sql) | 創建一個CallableStatment對象來調用資料庫存儲過程 |
boolean | isReadOnly() | 查看當前Collection對象是否為只讀 |
boolean | setReadOnly() | 設置當前對象的預設讀寫模式 |
返回類型 | 方法 | 功能描述 |
boolean | execute(String sql) | 執行靜態sql語句,該語句可能返回多個結果集,(改方法看似雞肋,其實也很雞肋,如果該語句可以返回一個ResultSet結果集,則為true,反之false,當然,當sql語句龐大的時候,可以用這個方法來檢測是否能夠執行從而節省資源) |
ResultSet | executeQuery(String sql) | 執行給定的sql語句,該語句返回單個ResultSet對象 |
void | clearBatch() | 清空這個Statement對象的sql命令列表 |
int[] | executeButch() | 將一批sql命令交給資料庫類執行,如果全部成功,則返回更新計數組成的數組,數組元素的排序和sql添加的順序相同 |
方法參數 | 方法 | 功能描述 |
void | setXXX(int index,[指定給的類型] k) | 將制定位置的參數設置成XXX值 |
ResultSet | executeQuery() | 執行Sql查詢,並返回對應的ResultSet結果集 |
void | setNull(int index ,int sqlType) | 設置指定的位置為SQL NUll值 |
int | executeUpdate() | 執行前麵包含的參數的動態 [INSERT|UPDATE|DELETE] |
void | clearParameters() | 清楚當前所有參數值 |
- 例子
PrepareStatment ps = conn.prepareStatment("select * from emp where ename = ? "); ps.setInt(1,'張三'); //將sql中的第一個參數設置為張三
4.CallableStatement介面 CallableStatemnt介面繼承並且擴展了PrepareStatemnt介面,用來執行對資料庫的存儲過程操作;
方法 | 功能描述 |
set+數據類型 | 將指定參數設置為java中指定的數據類型值 |
get+數據類型 | 以java中指定類型值的形式獲取指定的JDBC中相應參數的類型值 |
三.ResultSet結果集詳解
所有靜態欄位 | ||
int | CLOSE_CURSORS_AT_COMMIT | 該常量指示提交當前事務時,具有此可保存性的打開的 ResultSet 對象將被關閉。 |
int | CONCUR_READ_ONLY | 該常量指示不可以更新的 ResultSet 對象的併發模式。 |
int | CONCUR_UPDATABLE | 該常量指示可以更新的 ResultSet 對象的併發模式。 |
int | FETCH_FORWARD | 該常量指示將按正向(即從第一個到最後一個)處理結果集中的行。 |
int | FETCH_REVERSE | 該常量指示將按逆向(即從最後一個到第一個)處理結果集中的行處理。 |
int | FETCH_UNKNOWN | 該常量指示結果集中的行的處理順序未知。 |
int | FETCH_UNKNOWN | 該常量指示提交當前事務時,具有此可保存性的打開的 ResultSet 對象將保持開放。 |
int | TYPE_FORWARD_ONLY | 該常量指示游標只能向前移動的 ResultSet 對象的類型。 |
int | TYPE_SCROLL_INSENSITIVE | 該常量指示可滾動,再固定條件下可以修改表內容; |
int | TYPE_SCROLL_SENSITIVE | 該常量指示可滾動並且,不可修改表內容; |
常用方法 | ||
返回類型 | 方法 | 功能描述 |
boolean | next() | 將游標從當前位置向下移動一行,也就是讀取下一行 |
boolean | previous() | 將游標從當前位置向上移動一行,也就是讀取上一行 |
void | close() | 關閉ResultSet對象 |
int | getInt(int) | 以int的形式獲取結果集,以當前行指定序號的值,以列的編號或者列的名字 |
int | getInt(String) | 以下跟以上一樣以此類推 |
float | getFloat(int) | |
float | getFloat(String) | |
String | getString(int) | |
String | getString(String) | |
int | getRow() | 得到游標當前所指定的行號 |
boolean | absolute(int row) | 游標移動到row指定的行 |
boolean | relative(int rows) | 游標移動到相對於當前行的指定行,上下使用+和-表示 |
- 最基本的ResultSet
- 這個ResultSet的作用就是完成了查詢結果的存儲功能,並且只能讀取一次,不能夠來回滾動進行讀取操作,如圖;
- 可滾動的ResultSet
- 這個類型支持前後滾動取得記錄的next()向下讀取以一行,和previous()向上讀取以一行,同時還支持absolute(int row)讀取指定的一行,以
- 這種結果集的創建方式如下
Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency); ResultSet rs = st.executeQuery(sqlStr);
- 要實現這種類型的ResultSet對象的,在Statement創建該對象是為其指定類型;
- resultSetType用來設置ResultSet類型是否支持滾動,或者是不可滾動,取值如下:
- ResultSet.TYPE_FORWARD_ONLY 只能向前滾動;
- ResultSet.TYPE_SCROLL_INSENSITIVE 實現任意的前後滾動,即可以使用各種移動指針的方法,並且支持修改;
- Result.TYPE_SCROLL_SENSITIVE 實現任意的前後滾動,對修改敏感;
- resultSetConcurency 是設置 ResultSet 對象能夠修改的,取值如下:
- ResultSet.CONCUR_READ_ONLY 設置為只讀類型的參數。
- ResultSet.CONCUR_UPDATABLE 設置為可修改類型的參數。
所以如果只是想要可以滾動的類型的 Result,就要在Statement創建ResultSet是為其指定類型
Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = st.excuteQuery(sqlStr); //用這個 Statement 執行的查詢語句得到的就是可滾動的 ResultSet 。
4.ResultSet的可更新狀態
- RresltSet不僅可以用來存儲查詢結果返回的數據,也可以通過修改其內中值,然後起到更新資料庫內容的作用
- ResultSet相當於數據中的視圖,他沒有實體,並且,所提交的Sql語句必須滿足一下幾點內容
- 只引用了單個表
- 不包含jion和分組信息
- 列中要包含主鍵信息
Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE) //具體的ResultSet欄位信息請參考上面的欄位表
5. 可以保持的ResultSet
- Statement關閉結果集的方法,當前有一個結果集,又去執行了一條sql語句,會導致第一個結果集關閉,或者在commit方法的時候也會關閉結果集,可保持的意思就是不會被關閉的結果集
Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability) ResultSet rs = st.excuteQuery(sqlStr);
- 兩個參數在第3. 4. 中已經闡述的參數 ,這裡說明一下resultsetSetHoldability參數
- resultsetSetHoldability參數表名,該結果集是否能夠在連接關閉時打開
- ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交時,不關閉資料庫.
- ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交時ResultSet關閉.