JDBC連接數據以及詳細的ResultSet結果集解釋


一.數據庫連接

(前面為jdbc的其他參數,文章下部分為ResultSet詳解)
ResultSet rs = st.executeQuery(sqlStr)

 

1. java的sql框架支持多種數據庫連接,不同的數據庫需要使用不同的數據庫連接驅動,驅動來自於數據庫廠商;
 
2. 主要需要四個參數,一個驅動信息參數,三個數據庫入口參數
  • driverClass:驅動信息
  • url:數據庫連接參數
  • user:用戶名    
  • password:密碼
 
3.java語言定義了很多接口,數據庫廠商統一實現這些接口,所以通用;
 
 

二.接口

1.Connection接口
  • 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()  設置當前對象的默認讀寫模式
 
 
 
 
2.Statment接口
statment接口
返回類型 方法 功能描述
boolean execute(String sql) 執行靜態sql語句,該語句可能返回多個結果集,(改方法看似雞肋,其實也很雞肋,如果該語句可以返回一個ResultSet結果集,則為true,反之false,當然,當sql語句龐大的時候,可以用這個方法來檢測是否能夠執行從而節省資源)
ResultSet executeQuery(String sql) 執行給定的sql語句,該語句返回單個ResultSet對象
void clearBatch() 清空這個Statement對象的sql命令列表
int[] executeButch() 將一批sql命令交給數據庫類執行,如果全部成功,則返回更新計數組成的數組,數組元素的排序和sql添加的順序相同
 
 
3.PreparedStatment接口,繼承自Statment接口,因為PreparedStatment是安全的,Statment接口是不安全的
PrepareStatment接口的常用方法
方法參數 方法 功能描述
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內存結構
         
 
 
 
 
1.ResultSet對象是Statement和ParpareStatemen創建的,所以ResultSet的具體行為指令由創建他的類定義
  在jdbc中,最重要的就是ResultSet,因為他最常用,數據的中轉站,很有必要弄詳細;
 
 
2. ResultSet集合的主要功能使用來存儲查詢語句返回的結果集,注意: 他存儲的不是結果集內容,所以不會造成數據量過大而引發的內存溢出,
  他存儲的只是查詢數據的部分資料,而具體的數據信息會在調用next()時拿出來;
  以上言論是網上大佬說的,說錯了,說錯了,具體內容已經被保存到ResultSet里的RowDate里面了,字節的形式,打開會看到一堆二進制;
  尋找jvm可容量視化工具,請評論;
 
 
 
 
 
 
3.因為ResultSet是由其他對象來創建的,所以有有幾種類型不同的Result
  • 最基本的ResultSet
    • 這個ResultSet的作用就是完成了查詢結果的存儲功能,並且只能讀取一次,不能夠來回滾動進行讀取操作,如圖;
  • 可滾動的ResultSet
    • 這個類型支持前后滾動取得記錄的next()向下讀取以一行,和previous()向上讀取以一行,同時還支持absolute(int row)讀取指定的一行,以
      及relative(int rows) 移動到相對於當前行的指定行("-"號和"+")
    • 這種結果集的創建方式如下     
    Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency);

    ResultSet rs = st.executeQuery(sqlStr);

 

 
 
    • 要實現這種類型的ResultSet對象的,在Statement創建該對象是為其指定類型;
      •  resultSetType用來設置ResultSet類型是否支持滾動,或者是不可滾動,取值如下:
        1. ResultSet.TYPE_FORWARD_ONLY       只能向前滾動;            
        2. ResultSet.TYPE_SCROLL_INSENSITIVE 實現任意的前后滾動,即可以使用各種移動指針的方法,並且支持修改;
        3. Result.TYPE_SCROLL_SENSITIVE      實現任意的前后滾動,對修改敏感;    
 
 
      •  resultSetConcurency 是設置 ResultSet 對象能夠修改的,取值如下:              
  1. ResultSet.CONCUR_READ_ONLY 設置為只讀類型的參數。 
  2. 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關閉.
 



 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM