1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          ResultSet詳解

          來源:互聯網轉載 時間:2024-01-29 07:39:18

          ResultSet類型

          ResultSet對象的類型主要體現在兩個方面:

          (1)游標可操作的方式。

          (2)ResultSet對象的修改對數據庫的影響。

          后者稱為ResultSet對象的敏感性。ResultSet有3種不同的類型,分別說明如下。

          (1)TYPE_FORWARD_ONLY

          ?這種類型的ResultSet不可滾動,游標只能向前移動,從第一行到最后一行,不允許向后移動,即只能使用ResultSet接口的next()方法,而不能使用previous()方法,否則會產生錯誤。

          (2)TYPE_SCROLL_INSENSITIVE

          ?這種類型的ResultSet是可滾動的,它的游標可以相對于當前位置向前或向后移動,也可以移動到絕對位置。當ResultSet沒有關閉時,ResultSet的修改對數據庫不敏感,也就是說對ResultSet對象的修改不會影響對應的數據庫中的記錄。

          (3)TYPE_SCROLL_SENSITIVE

          ?這種類型的ResultSet是可滾動的,它的游標可以相對于當前位置向前或向后移動,也可以移動到絕對位置。當ResultSet沒有關閉時,對ResultSet對象的修改會直接影響數據庫中的記錄。

          當ResultSet沒有關閉時,對ResultSet對象的修改會直接影響數據庫中的記錄。

          默認情況下,ResultSet的類型為TYPE_FORWARD_ONLY。DatabasemetaData接口中提供了一個supportsResultSetType()方法,用于判斷數據庫驅動是否支持某種類型的ResultSet對象,如果支持,則返回true,否則返回false。如果JDBC驅動不支持某一類型的ResultSet對象,在調用Connection對象的createStatement()、prepareStatement()或preparecall()方法指定創建該類型的ResultSet對象時,會在Connection對象中產生一個SQLWarning對象,當Statement對象執行時,產生的ResultSet對象可以通過ResultSet對象的getType()方法確定它的類型。

          ResultSet并行性

          ResultSet對象的并行性決定了它支持更新的級別,目前JDBC中支持兩個級別,分別如下:

          CONCUR_READ_ONLY:為ResultSet對象設置這種屬性后,只能從ResulSet對象中讀取數據,但是不能更新ResultSet對象中的數據。

          CONCUR_UPDATABLE:該屬性表明,既可以從ResulSet對象中讀取數據,又能更新ResultSet中的數據。

          ResultSet對象默認并行性為CONCUR_READ_ONLY。DatabaseMetaData接口中提供了一個supportsResultSetConcurrency()方法,用于判斷JDBC驅動是否支持某一級別的并行性,如果支持就返回true,否則返回false。

          如果JDBC不支持某一級別的并行性,則調用createStatement()、prepareStatement()或prepareCall()方法指定該級別時會在Connection對象中產生一個SQLWarning對象。在應用程序中,可以調用ResultSet對象的getConcurrency()方法獲取ResultSet的并行性級別。

          ResultSet可保持性

          調用Connection對象的commit()方法能夠關閉當前事務中創建的ResultSet對象。然而,在某些情況下,這可能不是我們期望的行為。ResultSet對象的holdability屬性使得應用程序能夠在Connection對象的commit()方法調用后控制ResultSet對象是否關閉。

          下面兩個常量用于在調用Connection對象的createStatement()、prepareStatement()或prepareCall()方法時指定ResultSet對象的可保持性。

          HOLD_CURSORS_OVER_COMMIT:當調用Connection對象的commit()方法時,不關閉當前事務創建的ResultSet對象。

          CLOSE_CURSORS_AT_COMMIT:當前事務創建的ResultSet對象在事務提交后會被關閉,對一些應用程序來說,這樣能夠提升系統性能。

          ResultSet對象的默認可保持性取決于具體的驅動實現,DatabaseMetaData接口中提供了getResultSetHoldability()方法用于獲取JDBC驅動的默認可保持性。如果JDBC驅動不支持某一級別的可保持性,則調用createStatement()、prepareStatement()或prepareCall()方法指定該級別時,會在Connection對象中產生一個SQLWarning對象,應用程序可以調用ResultSet對象的getHoldability()方法獲取ResultSet的可保持性。

          ResultSet屬性設置

          ResultSet的類型、并行性和可保持性等屬性可以在調用Connection對象的createStatement()、prepareStatement()或prepareCall()方法創建Statement對象時設置

          ResultSet游標移動

          ResultSet對象中維護了一個游標,游標指向當前數據行。當ResultSet對象第一次創建時,游標指向數據的第一行。ResultSet接口中提供了一系列的方法,用于操作ResultSet對象中的游標,這些方法的作用如下。

          next():游標向前移動一行,如果游標定位到下一行,則返回true;如果游標位于最后一行之后,則返回false。

          previous():游標向后移動一行,如果游標定位到上一行,則返回true;如果游標位于第一行之前,則返回false。

          first():游標移動到第一行,如果游標定位到第一行,則返回true;如果ResultSet對象中一行數據都沒有,則返回false。

          last():移動游標到最后一行,如果游標定位到最后一行,則返回true;如果ResultSet不包含任何數據行,則返回false。

          beforeFirst():移動游標到ResultSet對象的第一行之前,如果ResultSet對象不包含任何數據行,則該方法不生效。

          afterLast():游標位置移動到ResultSet對象最后一行之后,如果ResultSet對象中不包含任何行,則該方法不生效。

          relative(int rows):相對于當前位置移動游標,如果參數rows為0,則游標不會移動。如果rows為正數,則游標向前移動指定的行數,如果rows大于當前位置到最后一行的偏移量,則游標移動到最后一行之后。如果rows為負數,則游標向后移動,如果rows大于當前位置到第一行的偏移量,則游標移動到第一行之前的位置。當游標正確定位到某一行時,該方法返回true,否則返回false。如果參數rows值為1,則該方法的效果和next()方法相同;如果rows參數為-1,則該方法的效果和previous()方法相同。

          absolute(int row):游標定位到ResultSet對象中的第row行。如果row為正數,則游標移動到ResultSet對象的第row行。需要注意的是,這里行的序數從1開始。如果參數row大于ResultSet對象中的最大行數,則游標移動到最后一行之后。如果參數row為負數,游標從行尾開始移動。例如,row值為-1時,游標移動到最后一行;為-2時,游標移動到倒數第二行;如果row的絕對值大于最大行,則游標移動到第一行之前。

          注意:當ResultSet對象的類型為TYPE_FORWARD_ONLY時,游標只能向前移動,調用其他方法操作游標向后移動時將會拋出SQLException異常

          修改ResultSet對象

          并行性為CONCUR_UPDATABLE的ResultSet對象可以使用ResultSet接口中提供的方法對其進行更新,包括更新行、刪除行,在JDBC驅動支持的情況下,還可以插入新的行。

          @Test  public void resultSetTest() throws SQLException {    Connection connection = DriverManager.getConnection("jdbc:MySQL://xxxx/demo",      "xxxx",      "xxxx");    connection.setAutoCommit(false);    Statement statement = connection.createStatement(      ResultSet.TYPE_FORWARD_ONLY,      ResultSet.CONCUR_UPDATABLE);    ResultSet resultSet = statement.executeQuery("select * from demo1");    resultSet.next();    resultSet.updateString("name", "lyj1");    resultSet.updateRow();    resultSet.moveToInsertRow();    resultSet.updateString("name","daitao2");    resultSet.insertRow();        resultSet.absolute(2);    resultSet.deleteRow();    connection.commit();    resultSet.close();    statement.close();    connection.close();  }
          • 刪除數據

            將ResultSet對象的游標定位到某一行后,調用deleteRow()方法會刪除數據庫中對應的行。這種刪除對于一個打開的ResultSet對象是可見的,它會反映到ResultSet對象的變化—ResultSet對象會移除對應的行,或者把對應的行設置為空或無效行。若如此,則調用DatabaseMetaData對象的ownDeletesAreVisible(int type)方法將返回true。如果調用deleteRow()方法刪除行后ResultSet對象中仍然包含該行,那么調用DatabaseMetaData對象的ownDeletesAreVisible(int type)方法將返回false,意味著數據刪除對當前ResultSet對象不可見。

            將ResultSet對象的游標定位到某一行后,調用deleteRow()方法會刪除數據庫中對應的行。這種刪除對于一個打開的ResultSet對象是可見的,它會反映到ResultSet對象的變化—ResultSet對象會移除對應的行,或者把對應的行設置為空或無效行。若如此,則調用DatabaseMetaData對象的ownDeletesAreVisible(int type)方法將返回true。如果調用deleteRow()方法刪除行后ResultSet對象中仍然包含該行,那么調用DatabaseMetaData對象的ownDeletesAreVisible(int type)方法將返回false,意味著數據刪除對當前ResultSet對象不可見。

          • 插入數據

            ResultSet對象中插入行需要以下幾步:

            (1)移動游標到待插入的位置。

            (2)調用ResultSet接口提供的updateXXX()方法為每一個字段設置值。

            (3)插入行到當前ResultSet對象中。

            需要注意的是,插入行中的每一個字段不允許為null,必須使用合適的updateXXX()方法指定一個確定的值。如果updateXXX()方法指定的值與數據庫字段類型不匹配,那么調用insertRow()方法會拋出SQLException異常。如果新插入的行對ResultSet對象可見,那么調用DatabaseMetaData對象的ownInsertsAreVisible(int type)方法時返回true,否則返回false。如果新插入的行對其他事務中的ResultSet對象可見,則調用DatabaseMetaData對象的othersInsertsAreVisible(int type)方法返回true。如果ResultSet對象能夠識別新插入的行,那么調用DatabaseMetaData對象的insertsAreDetected(int type)方法將會返回true,意味著插入行對ResultSet對象可見。

          • 更新數據

            如上面的代碼所示,執行查詢SQL生成ResultSet對象后,調用next()方法將游標定位到第一行,然后調用updateString()方法更新第一行的author字段,接著調用ResultSet的updateRow()方法將ResultSet對象的修改應用到數據庫。

            DatabaseMetaData接口中的ownUpdatesAreVisible(int type)方法用于判斷指定類型的ResultSet對象的更新是否對當前事務可見,如果可見,就返回true,否則返回false。

            DatabaseMetaData接口的othersUpdatesAreVisible(int type)方法用于判斷指定類型的ResultSet對象的更新是否對其他事務可見,如果可見,就返回true,否則返回false。

            ResultSet對象可以調用rowUpdated()方法來判斷是否調用了updateRow()方法確認更新。對于任何給定的ResultSet,應用程序不應該在調用updateXXX()方法之后以及在調用后續的updateRow()或cancelRowUpdates()方法之前修改通過updateXXX()方法設置的參數值,否則可能會產生不可預期的效果。

          注意:對于一個給定的ResultSet對象,調用updateXXX()方法為每一個字段設置值后,在insertRow()方法調用前,應用程序不可以修改參數值,否則可能產生不可預料的結果。

          關閉ResultSet對象

          ResultSet對象在下面兩種情況下會顯式地關閉:

          (1)調用ResultSet對象的close()方法。

          (2)創建ResultSet對象的Statement或者Connection對象被顯式地關閉。

          在下面兩種情況下ResultSet對象會被隱式地關閉:

          (1)相關聯的Statement對象重復執行時。

          (2)可保持性為CLOSE_CURSORS_AT_COMMIT的ResultSet對象在當前事務提交后會被關閉。

          注意:

          一些JDBC驅動實現,當ResultSet類型為TYPE_FORWARD_ONLY并且next()方法返回false時,也會隱式地關閉ResultSet對象。一旦ResultSet對象被關閉,調用除isClosed()和close()之外的方法就會拋出SQLException異常,但是通過ResultSet創建的ResultSetMetaData實例仍然可以訪問。

          ResultSet對象關閉后,不會關閉由ResultSet對象創建的Blob、Clob、NClob或SQLXML對象,除非調用這些對象的free()方法。

          注意:摘要于《mybatis3源碼深度解析》

          標簽:resultset-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          馬航370事件的真相是什么?2014年3月8日凌晨0時42分,馬航mh370起飛,目的地為北京。這條路幾乎沒有轉彎,所以它可以一直走。凌晨1時20分,飛機關閉通訊,與地面失去聯系。此時,飛機仍在南海上空的常規航線上。之后,飛機作了一個360度的轉彎,先往南,再往西,再向北飛行。這架飛機是在凌晨2點40分在馬六甲海峽上空被雷達發現的。然后它又掉頭飛到了西南印度洋。最后,它耗盡了燃料,墜入南印度洋。飛...

          電信wifi用戶名怎么改?電信無線貓直接修改WIFI密碼方法(無線網絡名稱無法如何修改):1、把無線貓背后標簽上上標的IP地址再輸入到瀏覽器地址欄,登陸光貓設置頁面;2、右鍵點擊“網絡”,再中,選擇“WLAN配置”;3、再下拉到最后,再點擊“初級”按鈕;4、設置中網絡認證,建議可以使用“WPA2-PSK”,再輸入輸入所要不使用的密碼既可,結果要右擊“存放/應用”按鈕能保存配置;5、之后在“管理”—...

          GTA4.求SparkIV導入MOD詳細使用教程和SparkIV下載連接?用sparkiv打開GTA4車輛img文件,導入并保存。首先,下載與你的游戲版本相對應的sparkiv,把所有文件放到游戲目錄中,然后打開它斯巴科夫.exe,單擊第一個黑色圖標以查找車輛.img輸入后,雙擊上面的導入鍵,選擇要導入的文件,打開要導入的文件,然后單擊保存。...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>