亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQLite 中文指南之FAQ

 更新時間:2008年09月12日 18:09:17   作者:  
sqllite使用過程中碰到的一些問題解決,中文版

(14) 我刪除了很多數(shù)據(jù)但是數(shù)據(jù)庫文件并沒有減小,是不是 Bug?

不是的。當你從 SQLite 刪除數(shù)據(jù)之后,未使用的磁盤空間被添加到一個內在的“空閑列表”中用于存儲你下次插入的數(shù)據(jù)。磁盤空間并沒有丟失,但是也不向操作系統(tǒng)返回磁盤空間。

如果你刪除了大量的數(shù)據(jù)且想要減小數(shù)據(jù)庫文件,執(zhí)行 VACUUM命令。VACUUM 命令會清空“空閑列表”,把數(shù)據(jù)庫尺寸縮到最小。注意, VACUUM 會耗費一些時間(在 Linux 系統(tǒng)下大約0.5秒/兆)并且要使用兩倍于數(shù)據(jù)庫文件大小的磁盤空間。

對于SQLite version 3.1, 替代VACUUM命令的一個方法是auto-vacuum模式,用 auto_vacuum pragma語法開啟該模式。

(15) 是否能將 SQLite 用于商業(yè)用途而不用交版權費用?

可以。SQLite 是公開的。代碼的任何部分都沒有聲明所有權。你可以用它來做你想要的任何事情。

(16) 如何插入有單引號(')的字符串?

使用雙單引號即可,例如:

INSERT INTO xyz valueS('5 O''clock');


插入數(shù)據(jù)庫的是:5 0'clock。

(17) SQLITE_SCHEMA 錯誤代表什么?

在 SQLite 版本3中,當一個預處理 SQL 語句不合法不能執(zhí)行時就會返回一個 SQLITE_SCHEMA 錯誤。當這個錯誤發(fā)生時,該語句應當用 sqlite3_prepare() API函數(shù)重新編譯。在 SQLite 版本3中,只有使用 sqlite3_prepare ()/sqlite3_step()/sqlite3_finalize() API函數(shù)執(zhí)行 SQL 才會發(fā)生這個錯誤,而使用 sqlite3_exec(). 則不會。這與版本2不同。

大部分發(fā)生這個錯誤的原因是當 SQL 預處理完時數(shù)據(jù)庫已經(jīng)改變了(可能是被另一個進程改變的)。還可能有如下原因:

* 對一個數(shù)據(jù)庫進行DETACH操作
* 對一個數(shù)據(jù)庫進行VACUUM操作
* 一個用戶函數(shù)定義被刪除或改變了。
* 一個排序定義被刪除或改變了。
* 一個授權函數(shù)改變了。

解決的辦法是重新編譯并再次嘗試執(zhí)行。所有涉及 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 函數(shù)的都應當重新編譯。參見下例:

int rc;
sqlite3_stmt *pStmt;
char zSql[] = "SELECT .....";

do {
/* Compile the statement from SQL. Assume success. */
sqlite3_prepare(pDb, zSql, -1, &pStmt, 0);

while( SQLITE_ROW==sqlite3_step(pStmt) ){
/* Do something with the row of available data */
}

/* Finalize the statement. If an SQLITE_SCHEMA error has
** occured, then the above call to sqlite3_step() will have
** returned SQLITE_ERROR. sqlite3_finalize() will return
** SQLITE_SCHEMA. In this case the loop will execute again.
*/
rc = sqlite3_finalize(pStmt);
} while( rc==SQLITE_SCHEMA );



(18) 為什么ROUND(9.95,1) 返回 9.9 而不是 10.0? 難道9.95 不該向上進位么?

SQLite 內部使用二進制運算,9.95用 64-bit IEEE 浮點數(shù) ( SQLite 內部使用的) 表示為 9.949999999999999289457264239899814128875732421875。所以當你輸入 "9.95"時, SQLite 就理解為上述的數(shù)字,進而四舍五入得到9.9。這個問題在處理浮點二進制數(shù)總會產生。通常的規(guī)則是十進制的有限浮點數(shù)通常無法表示為二進制有限浮點數(shù),只能由最接近的二進制數(shù)來代替。這個近似數(shù)會非常接近原數(shù),但總一些細微的不同,所以可能無法得到你預期的結果。

相關文章

最新評論