freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

sqlite開(kāi)發(fā)入門(mén)手冊(cè)-文庫(kù)吧資料

2025-07-01 22:27本頁(yè)面
  

【正文】 。 SQLite作為一種簡(jiǎn)單靈活的嵌入式數(shù)據(jù)庫(kù)也同樣提供了該功能,但是實(shí)現(xiàn)方式并不像其他數(shù)據(jù)庫(kù)那樣方便明顯,它只是通過(guò)一種隱含的技巧來(lái)達(dá)到批量插入的目的,其邏輯如下:事實(shí)上,批量插入并不是什么新的概念,在其它關(guān)系型數(shù)據(jù)庫(kù)的C接口API中都提供了一定的支持,只是接口的實(shí)現(xiàn)方式不同而已。 return 0。 sqlite3_close(conn)。 } if (sqlite3_step(stmt3) == SQLITE_DONE) { printf(The test table has been dropped.\n)。 sqlite3_close(conn)。 if (sqlite3_prepare_v2(conn,dropSQL,strlen(dropSQL),amp。 const char* dropSQL = DROP TABLE TESTTABLE。 } sqlite3_finalize(stmt2)。 return。 } if (sqlite3_step(stmt2) != SQLITE_DONE) { sqlite3_finalize(stmt2)。 sqlite3_close(conn)。 if (sqlite3_prepare_v2(conn,sql,strlen(sql),amp。 i insertCount。 sqlite3_stmt* stmt2 = NULL。 const char* testString = this is a test.。%s39。 //5. 構(gòu)建插入數(shù)據(jù)的sqlite3_stmt對(duì)象。 printf(Succeed to create test table now.\n)。 } //4. 釋放創(chuàng)建表語(yǔ)句對(duì)象的資源。 sqlite3_close(conn)。對(duì)于DDL和DML語(yǔ)句而言,sqlite3_step執(zhí)行正確的返回值 //只有SQLITE_DONE,對(duì)于SELECT查詢而言,如果有數(shù)據(jù)返回SQLITE_ROW,當(dāng)?shù)竭_(dá)結(jié)果集末尾時(shí)則返回 //SQLITE_DONE。 return。stmt,NULL) != SQLITE_OK) { if (stmt) sqlite3_finalize(stmt)。 //2. 準(zhǔn)備創(chuàng)建數(shù)據(jù)表,如果創(chuàng)建失敗,需要用sqlite3_finalize釋放sqlite3_stmt對(duì)象,以防止內(nèi)存泄露。 sqlite3_stmt* stmt = NULL。 return。conn)。 void doTest() { sqlite3* conn = NULL。3). 刪除測(cè)試表。 Sqlite實(shí)例代碼1. 常規(guī)數(shù)據(jù)插入1). 創(chuàng)建測(cè)試數(shù)據(jù)表。 至此,以讀事務(wù)和寫(xiě)事務(wù)為兩大方面,對(duì)鎖的5種狀態(tài)之間的轉(zhuǎn)換以及所起到的作用,分別做了舉例和總結(jié)。比如此處說(shuō)的情況,事務(wù)自動(dòng)提交,然后pager清理日志,清除頁(yè)緩存,從獨(dú)占鎖回到未鎖定狀態(tài)。一旦處理完日志,pager就可以將所有已修改的頁(yè)復(fù)制到數(shù)據(jù)庫(kù)文件。如果在系統(tǒng)崩潰前,日志頁(yè)沒(méi)有完整地寫(xiě)入磁盤(pán),那么數(shù)據(jù)庫(kù)就無(wú)法還原到其原來(lái)的狀態(tài),因?yàn)閮?nèi)存中的日志頁(yè)在系統(tǒng)崩潰時(shí)丟失了。這種情況下,依然很可能,即使pager已將頁(yè)寫(xiě)入日志文件,但是操作系統(tǒng)具有很多緩存,因此,可能還有一部分內(nèi)容在操作系統(tǒng)的緩存中(也許不是全部)。在pager開(kāi)始寫(xiě)入修改的頁(yè)前,首先要處理日志。獨(dú)占狀態(tài)中,主要工作是將修改的頁(yè)從頁(yè)面緩存刷新到數(shù)據(jù)庫(kù)文件。獨(dú)占狀態(tài)(exclusive)只有其他已有共享鎖的連接可以繼續(xù)正常工作。掛起狀態(tài)實(shí)際上是損耗階段。一旦獲得待定鎖,并繼續(xù)持有該鎖,阻止其他連接獲取待定鎖。此外要注意,給定數(shù)據(jù)庫(kù)同一時(shí)間只能有一個(gè)保留或獨(dú)占連接但是多個(gè)讀操作可以和一個(gè)寫(xiě)操作并存。因此,SQLite可以有效地讓多個(gè)讀操作和一個(gè)寫(xiě)操作同一時(shí)間在同一數(shù)據(jù)庫(kù)中工作。日志頁(yè)不會(huì)存儲(chǔ)在頁(yè)面緩存中,但Btree修改前會(huì)將其寫(xiě)入日志。未修改頁(yè)是Btree讀取但并未改變的頁(yè),它們是諸如select命令之類(lèi)的結(jié)果。保留狀態(tài)下,pager實(shí)際上管理三種頁(yè):已修改頁(yè)、未修改頁(yè)和日志頁(yè)。因此,要撤銷(xiāo)事務(wù)時(shí),pager只是簡(jiǎn)單地將日志文件中的內(nèi)容復(fù)制回?cái)?shù)據(jù)庫(kù)中。比如說(shuō),對(duì)于update修改的每條記錄,頁(yè)面獲取與原始記錄相關(guān)的數(shù)據(jù)庫(kù)頁(yè),并將它們復(fù)制到日志中。具體地說(shuō),它擁有將數(shù)據(jù)庫(kù)還原到事務(wù)開(kāi)始之前的原來(lái)狀體啊的數(shù)據(jù)庫(kù)頁(yè)。當(dāng)連接進(jìn)入保留狀態(tài)時(shí),pager初始化回滾日志。如果它獲得保留鎖,則準(zhǔn)備好開(kāi)始進(jìn)行數(shù)據(jù)修改。首先,連接必須遵從與select相同的路徑,先到共享狀態(tài)。這樣的做法,你可能會(huì)發(fā)現(xiàn),可以在兩個(gè)select exec()調(diào)用之間插入修改數(shù)據(jù)庫(kù)的操作,因此,這樣做無(wú)法確保兩個(gè)命令返回相同的結(jié)果。因此,它們各自經(jīng)歷完整的路徑?,F(xiàn)在考慮沒(méi)有begin和mit命令的情況。代碼的鎖路徑如下所示:UNLOCKEDPENDINGSHAREDUNLOCKED這里有明確的begin命令開(kāi)始,兩個(gè)select命令在一個(gè)事務(wù)種執(zhí)行,因此它們?cè)谕粋€(gè)共享狀態(tài)下執(zhí)行。)())(39。)(39。)(39。)(39??紤]如下實(shí)例:123456db = open(39。執(zhí)行select語(yǔ)句的連接啟動(dòng)事務(wù),從未鎖定轉(zhuǎn)到共享鎖,提交之后回到未鎖定狀態(tài),操作結(jié)束。這也是圖種描繪的最終內(nèi)容:讀操作、寫(xiě)操作以及它們?nèi)绾卧谝黄鸸ぷ?。與此對(duì)應(yīng),白色的待定狀態(tài)表示連接獲取和釋放共享鎖的途徑。不過(guò),從灰色的待定鎖開(kāi)始,限制就多了。默認(rèn)情況下,一切都從未鎖定(unlocked)開(kāi)始。 SQLite有5種不同的鎖狀態(tài):未鎖定(unlocked)、共享(shared)、保留(reserved)、待定(pending)和排它(exclusive)。SQLite有一個(gè)加鎖表,用來(lái)幫助不同的寫(xiě)數(shù)據(jù)庫(kù)都能夠在最后一刻再加鎖,以保證最大的并發(fā)性。 SQLite采用粗粒度的鎖。SQLite中的鎖查詢總是在事務(wù)內(nèi)執(zhí)行,事務(wù)又涉及到鎖,所以如果鎖控制不當(dāng),會(huì)產(chǎn)生很多問(wèn)題。mit命令提交所執(zhí)行的所有操作。事務(wù)由3個(gè)命令控制:begin、mit和rollback。首先,為了更好的理解鎖的概念,我們簡(jiǎn)單回顧一下什么是事務(wù)?事務(wù)在SQLite中,鎖是一個(gè)重要而又基本的概念。 Sqlite的鎖機(jī)制DROP VIEW IF EXISTS Error: no such view: testviewtestview。sqlitetestview。sqlite 五、刪除視圖:ASCREATE VIEW IF NOT EXISTS Error: table testview already existsSELECT * FROM testtable WHERE first_col 100。testviewsqlite SELECT * FROM testtable WHERE first_col 100。tempviewsqlite ASCREATE VIEW 1). 最簡(jiǎn)單的視圖:四、創(chuàng)建視圖:我們這里只是給出簡(jiǎn)單的SQL命令示例,具體的含義和技術(shù)細(xì)節(jié)可以參照上面的創(chuàng)建數(shù)據(jù)表部分,如臨時(shí)視圖、IF NOT EXISTS從句等。從上面的示例中可以看出,如果刪除的表不存在,SQLite將會(huì)報(bào)錯(cuò)并輸出錯(cuò)誤信息。 DROP TABLE IF EXISTS Error: no such table: testtabletesttable。sqlitetesttable。sqlitesqlite CREATE TABLE testtable (first_col integer)。在很多其他的關(guān)系型數(shù)據(jù)庫(kù)中是不可以這樣的,如果必須要?jiǎng)h除相關(guān)對(duì)象,只能在刪除表語(yǔ)句中加入WITH CASCADE從句。 關(guān)于ALTER TABLE最后需要說(shuō)明的是,在SQLite中該命令的執(zhí)行時(shí)間是不會(huì)受到當(dāng)前表行數(shù)的影響,也就是說(shuō),修改有一千萬(wàn)行數(shù)據(jù)的表和修改只有一條數(shù)據(jù)的表所需的時(shí)間幾乎是相等的。表testtable的定義中已經(jīng)包含了新增字段。CREATE TABLE testtable (first_col integer, second_col integer)。.schema ADD COLUMNALTER TABLE 2). 新增字段:表testtable已經(jīng)被修改為testtable2。 testtable2sqlitetesttable2。testtablesqlitesqlite CREATE TABLE testtable (first_col integer)。再有就是一旦表名被修改后,該表已存在的索引將不會(huì)受到影響,然而依賴該表的視圖和觸發(fā)器將不得不重新修改其定義。 1). 修改表名:其它的功能,如重命名字段、刪除字段和添加刪除約束等均為提供支持。ANDCHECK second_col integer, ... testtable2 (sqlite Error: constraint failed CHECKCREATE TABLE 9). 檢查性約束:從輸出結(jié)果可以看出,first_col已經(jīng)被定義了非空約束,因此不能在插入NULL值了。 testtable(first_col integersqlite 0 count(*)sqlite SELECT count(*) FROM testtable。sqlite DELETE FROM testtable。 ... )。UNIQUE second_col integer, ... testtable2 (sqlite在所有字段已經(jīng)定義完畢后,在定義表的唯一性約束,這里定義的是基于兩個(gè)列的唯一性約束。UNIQUE)。CREATE TABLE 7). 唯一性約束:和其他關(guān)系型數(shù)據(jù)庫(kù)一樣,主鍵必須是唯一的。 ... )。PRIMARY KEY second_col integer, ... CREATE TABLE testtable (first_col integersqlite直接在字段的定義上指定主鍵。 testtable2sqlite FROMAS SELECTCREATE TABLE 通過(guò)該方式創(chuàng)建的數(shù)據(jù)表將與SELECT查詢返回的結(jié)果集具有相同的Schema信息,但是不包含缺省值和主鍵等約束信息。 CREATE TABLE IF NOT EXISTS Error: table testtable already existstesttable (first_col integer)。sqlite然而如果在創(chuàng)建表時(shí)加上IF NOT EXISTS從句,那么本次創(chuàng)建操作將不會(huì)有任何影響,即不會(huì)有錯(cuò)誤拋出,除非當(dāng)前的表名和某一索引名沖突。 4). IF NOT EXISTS從句: .tables d:/sqlite重新建立sqlite的連接,并將剛剛導(dǎo)出的數(shù)據(jù)庫(kù)作為主庫(kù)重新導(dǎo)入。sqlite.backup testtable (first_col integer)。sqlitetemptable(first_col integer)。sqlite創(chuàng)建兩個(gè)表,一個(gè)臨時(shí)表和普通表。關(guān)于該規(guī)則還需要給出一些額外的說(shuō)明,如果我們?cè)趧?chuàng)建數(shù)據(jù)表時(shí)沒(méi)有指定數(shù)據(jù)庫(kù)名,那么將會(huì)在當(dāng)前連接的main數(shù)據(jù)庫(kù)中創(chuàng)建該表,在一個(gè)連接中只能有一個(gè)main數(shù)據(jù)庫(kù)。 CREATE TABLE ASd:/39。ATTACH DATABASE 3). 在指定數(shù)據(jù)庫(kù)創(chuàng)建表:)。39。0, second_col varchartesttable (first_col integersqlite 這里需要說(shuō)明的是,對(duì)于自定義數(shù)據(jù)表表名,如testtable,不能以sqlite_開(kāi)頭,因?yàn)橐栽撉熬Y定義的表名都用于sqlite內(nèi)部。testtable (first_col integer)。sqlite 但是對(duì)于一些SQLite特有的規(guī)則,我們會(huì)給予額外的說(shuō)明。,是因?yàn)閂C\Bin\下沒(méi)有“,”這四個(gè)文件,解決的方法:1 直接從Common7\IDE\下復(fù)制這四個(gè)文件到VC\Bin\下即可解決2 添加系統(tǒng)變量(Path),這樣:我的電腦屬性高級(jí)環(huán)境變量系統(tǒng)變量,在path中添加C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;,注意結(jié)尾最后用“;”隔開(kāi)!。執(zhí)行完這些命令后,在你的 Shell 程序也
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1