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

来源:https://www.cnblogs.com/lyuweigh/archive/2018/10/05/eb16d79e30a2e4a9f606770ff591fc7b.html
-Advertisement-
Play Games

一.資料庫連接 (前面為jdbc的其他參數,文章下部分為ResultSet詳解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多種資料庫連接,不同的資料庫需要使用不同的資料庫連接驅動,驅動來自於資料庫廠商; 2. 主要需要四個參數,一個 ...


一.資料庫連接

(前面為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關閉.
         



 




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今日小編要和我們共用的是微信被封了怎樣解封,期望能夠協助到我們。 今日小編要和我們共用的是微信被封了怎樣解封,期望能夠協助到我們。 今日小編要和我們共用的是微信被封了怎樣解封,期望能夠協助到我們。 今日小編要和我們共用的是微信被封了怎樣解封,期望能夠協助到我們。 今日小編要和我們共用的是微信被封了怎 ...
  • 現如今,微信已經被老老少少、全民所用。可是,在運用的過程中,也會呈現不少過錯的操作導致被封號,而許多封號都需求老友輔佐驗證的,接下來我就說下輔佐驗證的註意事項。 辦法/步驟 現如今,微信已經被老老少少、全民所用。可是,在運用的過程中,也會呈現不少過錯的操作導致被封號,而許多封號都需求老友輔佐驗證的, ...
  • 許多人來訴苦,說自己的號被平白無故封了,約束登錄,需求約請老友來輔佐,可是自己第一次遇到這個狀況,又怕犯錯導致更嚴重的封號。今日就寫這篇文章,通知咱們具體的操作過程,依照我說的一步步做,確保不會出問題。 許多人來訴苦,說自己的號被平白無故封了,約束登錄,需求約請老友來輔佐,可是自己第一次遇到這個狀況 ...
  • 微信在咱們日程日子中在許多人現已習慣了這個溝通方式。 但是有些運用者在運用不當的狀況下,會莫名的被封號。或許在運用過程中運用外掛軟體、群發廣告、發佈國家不允許的內容(如涉黃、涉賭、暴利、反動等)。 在這兒就需要給微信號解封了。怎麼解封成了許多用戶心中的疑慮。小編將為您回答,告訴您怎麼自助免除微信號封 ...
  • 跟著2018年國家展開的凈網舉動,在互聯網上任何行為舉止都需求慎重對待,一不留神的言語失去或違規,則會存在處分的危險,微信也不破例。近期微信嚴打違規微信號,讓不少對準則不瞭解的用戶也絕不留情的也直接給予了處分封禁。本次經歷講解的則是微信約束登入不可解封是否還能夠解封? 方法/過程: 跟著2018年國 ...
  • 題意 "題目鏈接" Sol 非常妙的一道題。。 可以這樣想,在BFS序中較早出現的一定是先訪問的,所以把每個點連出去的邊按出現的前後順序排個序 看一下按順序遍歷出來的序列與給出的是否相同就行了 cpp include using namespace std; const int MAXN = 2e5 ...
  • ·實驗任務 (1)使用Debug,用E命令和A命令以兩種方式將指令寫入記憶體 機器碼 彙編指令 b8 20 4e mov ax,4e20h 05 16 14 add ax,1416h bb 00 20 mov bx,2000h 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 ...
  • 第一章,我們介紹了有關彙編語言的基礎知識,在第二章我們主要介紹寄存器。 CPU的主要部件是寄存器,在8086CPU有14個寄存器,它們分別是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放兩個位元組。AX、BX、C ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...