国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

元數(shù)據(jù)和事務(wù)

2019-11-11 02:22:45
字體:
供稿:網(wǎng)友

   在SQL中,描述數(shù)據(jù)庫或其組成部分的數(shù)據(jù)稱為元數(shù)據(jù)(區(qū)別于那些存在數(shù)據(jù)庫中的實際數(shù)據(jù))。我們可以獲得三類元數(shù)據(jù):關(guān)于數(shù)據(jù)庫的元數(shù)據(jù)、關(guān)于結(jié)果集的元數(shù)據(jù)以及關(guān)于預(yù)備語句參數(shù)的元數(shù)據(jù)。第二個元數(shù)據(jù)類ResultSetMetaData則用于提供結(jié)果集的相關(guān)信息。每當(dāng)通過查詢得到一個結(jié)果集,我們都可以獲取該結(jié)果集的列數(shù)以及每一列的名稱、類型和字段寬度。

ConnectionDatabaseMetaData getMetaData()返回一個DatabaseMetaData對象,該對象封裝了有關(guān)數(shù)據(jù)庫連接的元數(shù)據(jù)。

DatabaseMetaDataResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String types[])返回某個目錄( catalog)中的所有表的描述,該目錄必須符合給定的模式( schema)、表名字模式以及類型標(biāo)準(zhǔn)。(模式用于描述一組相關(guān)的表和訪問權(quán)限,而目錄描述的是一組相關(guān)的模式,這些概念對組織大型數(shù)據(jù)庫非常重要。)catalog和schema參數(shù)可以為空,用于檢索那些沒有目錄和模式的表。如果不想考慮目錄和模式,也可以將上述參數(shù)設(shè)為null。types數(shù)組包含了所需的表類型的名稱。通常表類型有TABLE、 VIEW、 SYSTEM TABLE、GLOBAL TEMPORARY、 LOCAL TEMPORARY、ALIAS和SYNONYM。如果types為null,則返回所有類型的表。返回的結(jié)果集共有5列,均為String類型。1 TABLE_CAT 表目錄(可以為null)2 TABLE_SCHEM 表結(jié)構(gòu)模式(可以為null)3 TABLE_NAME 表名稱4 TABLE_TYPE 表類型5 REMARKS 關(guān)于表的注釋int getJDBCMajorVersion()int getJDBCMinorVersion()返回建立數(shù)據(jù)庫連接的JDBC驅(qū)動程序的主版本號和次版本號。例如,一個JDBC 3.0的驅(qū)動程序有一個主版本號3和一個次版本號0。int getMaxConnections()返回可同時連接到數(shù)據(jù)庫的最大連接數(shù)。int getMaxStatements()返回單個數(shù)據(jù)庫連接允許同時打開的最大語句數(shù)。如果對允許打開的語句數(shù)目沒有限制或者不可知,則返回0。
ResultSetResultSetMetaData getMetaData()返回與當(dāng)前ResultSet對象中的列相關(guān)的元數(shù)據(jù)。
ResultMetaDataint getColumnCount()返回當(dāng)前ResultSet對象中的列數(shù)。int getColumnDisplaySize(int column)返回給定列序號的列的最大寬度。參數(shù): column 列序號String getColumnLabel(int column)返回該列所建議的名稱。參數(shù): column 列序號String getColumnName(int column)返回指定的列序號所對應(yīng)的列名。參數(shù): column 列序號事務(wù)

        事務(wù)是指作為單個邏輯工作單元執(zhí)行的一系列操作,這些操作要么全做要么全不做,是一個不可分割的工作單位。

數(shù)據(jù)庫事務(wù)的四大特性(簡稱ACID)是: 

原子性:事務(wù)的原子性指的是,事務(wù)中包含的程序作為數(shù)據(jù)庫的邏輯工作單位,它所做的對數(shù)據(jù)修改操作要么全部執(zhí)行,要么完全不執(zhí)行。這種特性稱為原子性。

一致性:事務(wù)的一致性指的是在一個事務(wù)執(zhí)行之前和執(zhí)行之后數(shù)據(jù)庫都必須處于一致性狀態(tài)。這種特性稱為事務(wù)的一致性。假如數(shù)據(jù)庫的狀態(tài)滿足所有的完整性約束,就說該數(shù)據(jù)庫是一致的。

隔離性:分離性指并發(fā)的事務(wù)是相互隔離的。即一個事務(wù)內(nèi)部的操作及正在操作的數(shù)據(jù)必須封鎖起來,不被其它企圖進行修改的事務(wù)看到。假如并發(fā)交叉執(zhí)行的事務(wù)沒有任何控制,操縱相同的共享對象的多個并發(fā)事務(wù)的執(zhí)行可能引起異常情況。

持久性:持久性意味著當(dāng)系統(tǒng)或介質(zhì)發(fā)生故障時,確保已提交事務(wù)的更新不能丟失。即一旦一個事務(wù)提交,DBMS保證它對數(shù)據(jù)庫中數(shù)據(jù)的改變應(yīng)該是永久性的,即對已提交事務(wù)的更新能恢復(fù)。持久性通過數(shù)據(jù)庫備份和恢復(fù)來保證。

   將一組語句構(gòu)建成一個事務(wù)( transaction)。當(dāng)所有語句都順利執(zhí)行之后,事務(wù)可以被提交( commit)。否則,如果其中某個語句遇到錯誤,那么事務(wù)將被回滾,就好像沒有任何命令被執(zhí)行過一樣。默認(rèn)情況下,數(shù)據(jù)庫連接處于自動提交模式( autocommit mode)。每個SQL命令一旦被執(zhí)行便被提交給數(shù)據(jù)庫。一旦命令被提交,就無法對它進行回滾操作。在使用事務(wù)時,需要關(guān)閉這個默認(rèn)值:

con.setAutoCommit(false)執(zhí)行了所有命令之后,調(diào)用commit方法。如果出現(xiàn)錯誤,請調(diào)用rollback()此時,程序?qū)⒆詣映蜂N自上次提交以來的所有命令。當(dāng)事務(wù)被SQLException異常中斷時,通常的辦法是發(fā)起回滾操作。

保存點

   在使用某些驅(qū)動程序時,使用保存點( Save Point)可以更好地控制回滾操作。創(chuàng)建一個保存點意味著稍后只需返回到這個點,而非事務(wù)的開頭。

Savepoint sp =con.setSavepoint();......if()con.rollback(sp);當(dāng)不再需要保存點時,必須釋放它con.releaseSavepoint(sp);

批量更新

   處于同一批中的容器可以是INSERT、 UPDATE和DELETE等操作,也可以是數(shù)據(jù)庫定義命令,如CREATE TABLE和DROP TABLE。但是,在批量處理中添加SELECT命令會拋出異常(從概念上講,批量處理中的SELECT語句沒有意義,因為它會返回結(jié)果集,而并不更新數(shù)據(jù)庫)。

statement.addBatch(sql);
statement.addBatch(sql);
statement.addBatch(sql);
statement.addBatch(sql);int[] a = statement.executeBatch();

   調(diào)用executeBatch方法將為所有已提交的命令返回一個記錄數(shù)的數(shù)組。為了在批量模式下正確地處理錯誤,必須將批量執(zhí)行的操作視為單個事務(wù)。如果批量更新在執(zhí)行過程中失敗,那么必須將它回滾到批量操作開始之前的狀態(tài)。首先,關(guān)閉自動提交模式,然后收集批量操作,執(zhí)行并提交該操作,最后恢復(fù)最初的自動提交模式.。

Connectionboolean getAutoCommit()void setAutoCommit(boolean b)獲取將該連接中的自動提交模式,或?qū)⑵湓O(shè)置為b。如果自動更新為true,那么所有語句將在執(zhí)行結(jié)束后立刻被提交。void commit()提交自上次提交以來所有執(zhí)行過的語句。void rollback()撤銷自上次提交以來所有執(zhí)行過的語句所產(chǎn)生的影響。Savepoint setSavepoint() Savepoint setSavepoint(String name) 設(shè)置一個匿名或具名的保存點。void rollback(Savepoint svpt) 回滾到給定保存點。void releaseSavepoint(Savepoint svpt) 釋放給定的保存點。
Savepointint getSavepointId()獲取該匿名保存點的ID號。如果該保存點具有名字,則拋出一個SQLException異常。String getSavepointName()獲取該保存點的名稱。如果該對象為匿名保存點,則拋出一個SQLException異常。
Statementvoid addBatch(String command)添加命令到當(dāng)前批量命令中。int[] executeBatch()執(zhí)行當(dāng)前批量更新中的所有命令。返回一個記錄數(shù)的數(shù)組,其中每一個元素都對應(yīng)一條命令,代表受該命令影響的記錄總數(shù)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 澎湖县| 合川市| 皋兰县| 普兰店市| 嵩明县| 东明县| 大港区| 鄄城县| 永新县| 庐江县| 天津市| 定兴县| 玉林市| 灌阳县| 福建省| 东宁县| 潼关县| 昌图县| 吉首市| 铅山县| 泸溪县| 积石山| 体育| 错那县| 高清| 临猗县| 西青区| 桃园市| 玛纳斯县| 梨树县| 石河子市| 嘉定区| 石景山区| 遂宁市| 桓台县| 潼南县| 仙桃市| 盐亭县| 汉源县| 洛阳市| 菏泽市|