日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何縮小SQLite數(shù)據(jù)庫(kù)? (sqlite數(shù)據(jù)庫(kù) 縮小)

SQLite是一種輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它被廣泛應(yīng)用于各種類(lèi)型的應(yīng)用程序中。盡管SQLite數(shù)據(jù)庫(kù)非常流行,并且被認(rèn)為是非常穩(wěn)定和可靠的,但它們?nèi)匀蝗菀鬃兊梅浅4?,從而影響其性能。如果您發(fā)現(xiàn)您的SQLite數(shù)據(jù)庫(kù)太大并且需要縮小它,請(qǐng)繼續(xù)閱讀下面的內(nèi)容。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為數(shù)千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為甘南企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,甘南網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

1. 刪除不需要的數(shù)據(jù)

如果您的SQLite數(shù)據(jù)庫(kù)包含大量不需要的數(shù)據(jù),那么最簡(jiǎn)單的方法就是刪除它們。您可以手動(dòng)刪除數(shù)據(jù),也可以編寫(xiě)腳本來(lái)自動(dòng)刪除數(shù)據(jù)。刪除不需要的數(shù)據(jù)后,您的數(shù)據(jù)庫(kù)將變得更小,性能也會(huì)得到改善。

2. 重新創(chuàng)建數(shù)據(jù)庫(kù)

如果您的SQLite數(shù)據(jù)庫(kù)已經(jīng)非常大,但是大部分?jǐn)?shù)據(jù)都是不需要的,那么您可能需要考慮重新創(chuàng)建數(shù)據(jù)庫(kù)。這樣可以在不丟失數(shù)據(jù)的情況下清除所有不需要的數(shù)據(jù)。請(qǐng)確保在重建數(shù)據(jù)庫(kù)之前備份數(shù)據(jù),以防止數(shù)據(jù)丟失。

3. 使用VACUUM命令

VACUUM命令可以使用空間最小化SQLite數(shù)據(jù)庫(kù)。它會(huì)刪除無(wú)用的內(nèi)容以及回收未使用的存儲(chǔ)空間,從而減小數(shù)據(jù)庫(kù)的大小。您可以通過(guò)在SQLite命令行中使用以下命令來(lái)運(yùn)行VACUUM命令:

“`

VACUUM;

“`

請(qǐng)注意,VACUUM命令可能需要較長(zhǎng)時(shí)間才能完成,具體取決于數(shù)據(jù)庫(kù)的大小以及計(jì)算機(jī)的性能。

4. 分離未使用的表

如果您的SQLite數(shù)據(jù)庫(kù)包含許多未使用的表,請(qǐng)考慮將這些表分離到單獨(dú)的數(shù)據(jù)庫(kù)中。這樣可以將未使用的表從主數(shù)據(jù)庫(kù)中刪除,從而減少主數(shù)據(jù)庫(kù)的大小。將未使用的表分離到單獨(dú)的數(shù)據(jù)庫(kù)中還可以提高數(shù)據(jù)庫(kù)的性能。

5. 壓縮數(shù)據(jù)庫(kù)

如果以上所有方法仍然不能縮小SQLite數(shù)據(jù)庫(kù)或者您需要極端地減小數(shù)據(jù)庫(kù)大小,那么您可以考慮壓縮數(shù)據(jù)庫(kù)。SQLite數(shù)據(jù)庫(kù)可以通過(guò)將數(shù)據(jù)存儲(chǔ)在壓縮格式中來(lái)縮小其體積。要壓縮SQLite數(shù)據(jù)庫(kù),請(qǐng)使用以下命令:

“`

sqlite3 /path/to/database.db “VACUUM INTO ‘/path/to/new/database.db'”;

“`

請(qǐng)注意,壓縮數(shù)據(jù)庫(kù)可能需要較長(zhǎng)時(shí)間才能完成,具體取決于數(shù)據(jù)庫(kù)的大小以及計(jì)算機(jī)的性能。

縮小SQLite數(shù)據(jù)庫(kù)的方法有很多種,您可以根據(jù)具體的情況選擇最適合您的方法。無(wú)論您使用哪種方法,始終要確保備份了數(shù)據(jù),以防止數(shù)據(jù)丟失。

相關(guān)問(wèn)題拓展閱讀:

  • ios 從哪些方面去做sqlite 數(shù)據(jù)庫(kù)的優(yōu)化
  • android怎么操作sqlite數(shù)據(jù)庫(kù)

ios 從哪些方面去做sqlite 數(shù)據(jù)庫(kù)的優(yōu)化

這個(gè)是百度經(jīng)驗(yàn)

SQLite是嵌入式的和輕量級(jí)的sql數(shù)據(jù)庫(kù)。廣泛用納慶于包括瀏覽器、ios、Android以及一些便攜需求的小型web應(yīng)用系統(tǒng)。

SQLite是MySQL的精簡(jiǎn)版,無(wú)需服務(wù)器就能進(jìn)行;限制條件:必須手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù),沒(méi)有面向?qū)ο蟮慕涌冢?/p>

要想在工程中使用SQLite,需要將SQLite的庫(kù)添加到工程:

在本工程中的.h文件中引用這個(gè)庫(kù):

創(chuàng)建數(shù)據(jù)庫(kù):

接下來(lái)如果該數(shù)據(jù)庫(kù)不存在需要?jiǎng)?chuàng)建這個(gè)數(shù)搜巖據(jù)庫(kù),創(chuàng)建的過(guò)程寫(xiě)在viewDidLoad里面世茄御:

因?yàn)镾QLite數(shù)據(jù)庫(kù)是文件數(shù)據(jù)庫(kù),是保存在文件系統(tǒng)中的,ios下:

Documents:應(yīng)用中用戶(hù)數(shù)據(jù)可以放在這里,iTunes備份和恢復(fù)的時(shí)候會(huì)包括此目錄

tmp:存放臨時(shí)文件,iTunes不會(huì)備份和恢復(fù)此目錄,此目錄下文件可能會(huì)在應(yīng)用退出后刪除

Library/Caches:存放緩存文件,iTunes不會(huì)備份此目錄,此目錄下文件不會(huì)在應(yīng)用退出刪除

我們的數(shù)據(jù)庫(kù)文件是保存在Documents下的。

切記,因?yàn)橛玫氖荂語(yǔ)法,sqlite3_open傳入的是database的地址!

先來(lái)看看.h文件

#import

#import

#define kFilename @”testdb.db”

@class sqlTestList;

@interface sqlService : NSObject {

sqlite3 *_database;

}

@property (nonatomic) sqlite3 *_database;

-(BOOL) createTestList:(sqlite3 *)db;//創(chuàng)建數(shù)據(jù)庫(kù)

-(BOOL) insertTestList:(sqlTestList *)insertList;//插入數(shù)據(jù)

-(BOOL) updateTestList:(sqlTestList *)updateList;//更新數(shù)據(jù)

-(NutableArray*)getTestList;//獲取全部數(shù)據(jù)

– (BOOL) deleteTestList:(sqlTestList *)deletList;//刪除數(shù)據(jù):

– (NutableArray*)searchTestList:(NSString*)searchString;//查詢(xún)數(shù)裂做據(jù)庫(kù),searchID為要查詢(xún)數(shù)據(jù)的ID,返回?cái)?shù)據(jù)為查詢(xún)到的數(shù)據(jù)

@end

@interface sqlTestList : NSObject//重新定義了一個(gè)類(lèi),專(zhuān)門(mén)用于存儲(chǔ)數(shù)據(jù)

{

int sqlID;

NSString *sqlText;

NSString *sqlname;

}

@property (nonatomic) int sqlID;

@property (nonatomic, retain) NSString *sqlText;

@property (nonatomic, retain) NSString *sqlname;

@end

再來(lái)看看.m文件

/敬源棚/

// sqlService.m

// SQLite3Test

//

// Created by fengxiao on.

// Copyright 2023 __MyCompanyName__. All rights reserved.

//

#import “sqlService.h”

@implementation sqlService

@synthesize _database;

– (id)init

{

return self;

}

– (void)dealloc

{

;

}

//獲取document目錄并返回?cái)?shù)據(jù)庫(kù)目錄

– (NSString *)dataFilePath{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = ;

NSLog(@”=======%@”,documentsDirectory);

return ;//這里很神奇,可以定義成任何類(lèi)型的文件,也可以不定義成.db文件,任何格式都行,定義成.文件都行,達(dá)到了很好的數(shù)據(jù)隱秘性

}

//創(chuàng)建,打開(kāi)數(shù)據(jù)庫(kù)

– (BOOL)openDB {

//獲取數(shù)據(jù)庫(kù)路徑

NSString *path = ;

//文件管理器亮則

NSFileManager *fileManager = ;

//判斷數(shù)據(jù)庫(kù)是否存在

BOOL find = ;

//如果數(shù)據(jù)庫(kù)存在,則用sqlite3_open直接打開(kāi)(不要擔(dān)心,如果數(shù)據(jù)庫(kù)不存在sqlite3_open會(huì)自動(dòng)創(chuàng)建)

if (find) {

NSLog(@”Database file have already existed.”);

//打開(kāi)數(shù)據(jù)庫(kù),這里的是將NSString轉(zhuǎn)換為C字符串,因?yàn)镾QLite3是采用可移植的C(而不是

//Objective-C)編寫(xiě)的,它不知道什么是NSString.

if(sqlite3_open(, &_database) != SQLITE_OK) {

//如果打開(kāi)數(shù)據(jù)庫(kù)失敗則關(guān)閉數(shù)據(jù)庫(kù)

sqlite3_close(self._database);

NSLog(@”Error: open database file.”);

return NO;

}

//創(chuàng)建一個(gè)新表

;

return YES;

}

//如果發(fā)現(xiàn)數(shù)據(jù)庫(kù)不存在則利用sqlite3_open創(chuàng)建數(shù)據(jù)庫(kù)(上面已經(jīng)提到過(guò)),與上面相同,路徑要轉(zhuǎn)換為C字符串

if(sqlite3_open(, &_database) == SQLITE_OK) {

//創(chuàng)建一個(gè)新表

;

return YES;

} else {

//如果創(chuàng)建并打開(kāi)數(shù)據(jù)庫(kù)失敗則關(guān)閉數(shù)據(jù)庫(kù)

sqlite3_close(self._database);

NSLog(@”Error: open database file.”);

return NO;

}

return NO;

}

//創(chuàng)建表

– (BOOL) createTestList:(sqlite3*)db {

//這句是大家熟悉的SQL語(yǔ)句

char *sql = “create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, testID int,testValue text,testName text)”;// testID是列名,int 是數(shù)據(jù)類(lèi)型,testValue是列名,text是數(shù)據(jù)類(lèi)型,是字符串類(lèi)型

sqlite3_stmt *statement;

//sqlite3_prepare_v2 接口把一條SQL語(yǔ)句解析到statement結(jié)構(gòu)里去. 使用該接口訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)是當(dāng)前比較好的的一種方法

NSInteger sqlReturn = sqlite3_prepare_v2(_database, sql, -1, &statement, nil);

//之一個(gè)參數(shù)跟前面一樣,是個(gè)sqlite3 * 類(lèi)型變量,

//第二個(gè)參數(shù)是一個(gè) sql 語(yǔ)句。

//第三個(gè)參數(shù)我寫(xiě)的是-1,這個(gè)參數(shù)含義是前面 sql 語(yǔ)句的長(zhǎng)度。如果小于0,sqlite會(huì)自動(dòng)計(jì)算它的長(zhǎng)度(把sql語(yǔ)句當(dāng)成以\0結(jié)尾的字符串)。

//第四個(gè)參數(shù)是sqlite3_stmt 的指針的指針。解析以后的sql語(yǔ)句就放在這個(gè)結(jié)構(gòu)里。

//第五個(gè)參數(shù)是錯(cuò)誤信息提示,一般不用,為nil就可以了。

//如果這個(gè)函數(shù)執(zhí)行成功(返回值是 SQLITE_OK 且 statement 不為NULL ),那么下面就可以開(kāi)始插入二進(jìn)制數(shù)據(jù)。

//如果SQL語(yǔ)句解析出錯(cuò)的話(huà)程序返回

if(sqlReturn != SQLITE_OK) {

NSLog(@”Error: failed to prepare statement:create test table”);

return NO;

}

//執(zhí)行SQL語(yǔ)句

int success = sqlite3_step(statement);

//釋放sqlite3_stmt

sqlite3_finalize(statement);

//執(zhí)行SQL語(yǔ)句失敗

if ( success != SQLITE_DONE) {

NSLog(@”Error: failed to dehydrate:create table test”);

return NO;

}

NSLog(@”Create table ‘testTable’ successed.”);

return YES;

}

//插入數(shù)據(jù)

-(BOOL) insertTestList:(sqlTestList *)insertList {

//先判斷數(shù)據(jù)庫(kù)是否打開(kāi)

if () {

sqlite3_stmt *statement;

//這個(gè) sql 語(yǔ)句特別之處在于 values 里面有個(gè)? 號(hào)。在sqlite3_prepare函數(shù)里,?號(hào)表示一個(gè)未定的值,它的值等下才插入。

static char *sql = “INSERT INTO testTable(testID, testValue,testName) VALUES(?, ?, ?)”;

int success2 = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);

if (success2 != SQLITE_OK) {

NSLog(@”Error: failed to insert:testTable”);

sqlite3_close(_database);

return NO;

}

//這里的數(shù)字1,2,3代表上面的第幾個(gè)問(wèn)號(hào),這里將三個(gè)值綁定到三個(gè)綁定變量

sqlite3_bind_int(statement, 1, insertList.sqlID);

sqlite3_bind_text(statement, 2, , -1, SQLITE_TRANSIENT);

sqlite3_bind_text(statement, 3, , -1, SQLITE_TRANSIENT);

//執(zhí)行插入語(yǔ)句

success2 = sqlite3_step(statement);

//釋放statement

sqlite3_finalize(statement);

//如果插入失敗

if (success2 == SQLITE_ERROR) {

NSLog(@”Error: failed to insert into the database with message.”);

//關(guān)閉數(shù)據(jù)庫(kù)

sqlite3_close(_database);

return NO;

}

//關(guān)閉數(shù)據(jù)庫(kù)

sqlite3_close(_database);

return YES;

}

return NO;

}

//獲取數(shù)據(jù)

– (NutableArray*)getTestList{

NutableArray *array = ;

//判斷數(shù)據(jù)庫(kù)是否打開(kāi)

if () {

sqlite3_stmt *statement = nil;

//sql語(yǔ)句

char *sql = “SELECT testID, testValue ,testName FROM testTable”;//從testTable這個(gè)表中獲取 testID, testValue ,testName,若獲取全部的話(huà)可以用*代替testID, testValue ,testName。

if (sqlite3_prepare_v2(_database, sql, -1, &statement, NULL) != SQLITE_OK) {

NSLog(@”Error: failed to prepare statement with message:get testValue.”);

return NO;

}

else {

//查詢(xún)結(jié)果集中一條一條的遍歷所有的記錄,這里的數(shù)字對(duì)應(yīng)的是列值,注意這里的列值,跟上面sqlite3_bind_text綁定的列值不一樣!一定要分開(kāi),不然會(huì)crash,只有這一處的列號(hào)不同,注意!

while (sqlite3_step(statement) == SQLITE_ROW) {

sqlTestList* sqlList = init> ;

sqlList.sqlID = sqlite3_column_int(statement,0);

char* strText = (char*)sqlite3_column_text(statement, 1);

sqlList.sqlText = ;

char *strName = (char*)sqlite3_column_text(statement, 2);

sqlList.sqlname = ;

;

;

}

}

sqlite3_finalize(statement);

sqlite3_close(_database);

}

return ;//定義了自動(dòng)釋放的NSArray,這樣不是個(gè)好辦法,會(huì)造成內(nèi)存泄露,建議大家定義局部的數(shù)組,再賦給屬性變量。

}

//更新數(shù)據(jù)

-(BOOL) updateTestList:(sqlTestList *)updateList{

if () {

sqlite3_stmt *statement;//這相當(dāng)一個(gè)容器,放轉(zhuǎn)化OK的sql語(yǔ)句

//組織SQL語(yǔ)句

char *sql = “update testTable set testValue = ? and testName = ? WHERE testID = ?”;

//將SQL語(yǔ)句放入sqlite3_stmt中

int success = sqlite3_prepare_v2(_database, sql, -1, &statement, NULL);

if (success != SQLITE_OK) {

NSLog(@”Error: failed to update:testTable”);

sqlite3_close(_database);

return NO;

}

附上出處鏈接:

android怎么操作sqlite數(shù)據(jù)庫(kù)

有兩種方法:

一種是把sqlite數(shù)據(jù)庫(kù)的源代碼(C/c++)編譯到你的App中,利用API操作數(shù)據(jù)庫(kù),這種方法饑納需要C/C++開(kāi)發(fā)App;還可以把sqlite數(shù)據(jù)庫(kù)的源代碼編譯成動(dòng)態(tài)禪肢歲鏈接庫(kù),在其他語(yǔ)言的APP中調(diào)賀睜用。

另一種辦法是使用繼集成了sqlite數(shù)據(jù)庫(kù)驅(qū)動(dòng)的系統(tǒng)開(kāi)發(fā),例如RAD Studio Seattle以后的版本,包括delphi/c++ bulider兩種開(kāi)發(fā)工具,可以使用C++/Object Pascal語(yǔ)言進(jìn)行開(kāi)發(fā),這個(gè)集成環(huán)境使用很方便。

SQLite 一個(gè)非常流行的嵌入式數(shù)據(jù)庫(kù),它支持 SQL 語(yǔ)言,并且只利用很少的內(nèi)存就有很好的性能。此外源磨它還是開(kāi)源的,任何人都可以使用它。許多開(kāi)源項(xiàng)目((Mozilla, PHP, Python)都使用了 SQLite.

Android 開(kāi)發(fā)中使用 SQLite 數(shù)據(jù)庫(kù)

Activites 可以通過(guò) Content Provider 或者 Service 訪(fǎng)問(wèn)一個(gè)數(shù)據(jù)庫(kù)。下面會(huì)詳細(xì)講解如果創(chuàng)建數(shù)據(jù)庫(kù),添加數(shù)據(jù)和查詢(xún)數(shù)據(jù)庫(kù)。

創(chuàng)建數(shù)據(jù)庫(kù)

Android 不自動(dòng)提供數(shù)據(jù)庫(kù)。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫(kù),然后創(chuàng)建表、索引,填充數(shù)據(jù)。Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),你只要繼承 SQLiteOpenHelper 類(lèi),就可以輕松的創(chuàng)建數(shù)據(jù)庫(kù)。SQLiteOpenHelper 類(lèi)根據(jù)開(kāi)發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫(kù)春裂戚使用的邏輯。SQLiteOpenHelper 的子類(lèi),至少需要實(shí)現(xiàn)三個(gè)方法:

構(gòu)造函數(shù),調(diào)用父類(lèi) SQLiteOpenHelper 的構(gòu)造函數(shù)。這個(gè)方法需要四個(gè)參數(shù):上下文環(huán)境(例如,一個(gè) Activity),數(shù)據(jù)庫(kù)名字,一個(gè)可選的游扒陵標(biāo)工廠(通常是 Null),一個(gè)代表你正在使用的數(shù)據(jù)庫(kù)模型版本的整數(shù)。

onCreate()方法,它需要一個(gè) SQLiteDatabase 對(duì)象作為參數(shù),根據(jù)需要對(duì)這個(gè)對(duì)象填充表和初始化數(shù)據(jù)。

onUpgrage() 方法,它需要三個(gè)參數(shù),一個(gè) SQLiteDatabase 對(duì)象,一個(gè)舊的版本號(hào)和一個(gè)新的版本號(hào),這樣你就可以清楚如何把一個(gè)數(shù)據(jù)庫(kù)從舊的模型轉(zhuǎn)變到新的模型。

在Android中操作SQLite數(shù)據(jù)庫(kù)使用SQLiteDatabase類(lèi),使用該類(lèi)可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行添加(Create)、查詢(xún)(Retrieve)、更新(Update)和刪除(Delete)操作。需要重點(diǎn)掌握的是execSQL()和rawQuery()方法。其中 execSQL()方法可以執(zhí)行insert、delete、update和CREATE TABLE之類(lèi)有更改行為的SQL語(yǔ)句; rawQuery()方法用于執(zhí)行select語(yǔ)句。

舉旦腔一例說(shuō)明execSQL()使用方法:

SQLiteDatabase mydb = ….;

mydb.execSQL(“亂遲猜insert into person(name, age) values(‘網(wǎng)蟲(chóng)一族’, 23)”);

mydb.close();

從上面簡(jiǎn)單的例子可以看出,SQLiteDatabase執(zhí)行的是標(biāo)準(zhǔn)的SQL語(yǔ)嘩型句,所以,并不需要額外掌握更多的知識(shí),在幫助文檔中熟悉下SQLiteDatabase類(lèi)的幾個(gè)方法就可以了。

sqlite數(shù)據(jù)庫(kù) 縮小的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于sqlite數(shù)據(jù)庫(kù) 縮小,如何縮小SQLite數(shù)據(jù)庫(kù)?,ios 從哪些方面去做sqlite 數(shù)據(jù)庫(kù)的優(yōu)化,android怎么操作sqlite數(shù)據(jù)庫(kù)的信息別忘了在本站進(jìn)行查找喔。

成都網(wǎng)站營(yíng)銷(xiāo)推廣找創(chuàng)新互聯(lián),全國(guó)分站站群網(wǎng)站搭建更好做SEO營(yíng)銷(xiāo)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽(yáng)服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽(yáng)服務(wù)器機(jī)房服務(wù)器托管租用。


網(wǎng)頁(yè)題目:如何縮小SQLite數(shù)據(jù)庫(kù)? (sqlite數(shù)據(jù)庫(kù) 縮小)
分享地址:http://www.dlmjj.cn/article/coocjjo.html