如何缩小SQLite数据库? (sqlite数据库 缩小)

SQLite是一种轻量级的关系型数据库管理系统,它被广泛应用于各种类型的应用程序中。尽管SQLite数据库非常流行,并且被认为是非常稳定和可靠的,但它们仍然容易变得非常大,从而影响其性能。如果您发现您的SQLite数据库太大并且需要缩小它,请继续阅读下面的内容。

1. 删除不需要的数据

如果您的SQLite数据库包含大量不需要的数据,那么最简单的方法就是删除它们。您可以手动删除数据,也可以编写脚本来自动删除数据。删除不需要的数据后,您的数据库将变得更小,性能也会得到改善。

2. 重新创建数据库

如果您的SQLite数据库已经非常大,但是大部分数据都是不需要的,那么您可能需要考虑重新创建数据库。这样可以在不丢失数据的情况下清除所有不需要的数据。请确保在重建数据库之前备份数据,以防止数据丢失。

3. 使用VACUUM命令

VACUUM命令可以使用空间最小化SQLite数据库。它会删除无用的内容以及回收未使用的存储空间,从而减小数据库的大小。您可以通过在SQLite命令行中使用以下命令来运行VACUUM命令:

“`

VACUUM;

“`

请注意,VACUUM命令可能需要较长时间才能完成,具体取决于数据库的大小以及计算机的性能。

4. 分离未使用的表

如果您的SQLite数据库包含许多未使用的表,请考虑将这些表分离到单独的数据库中。这样可以将未使用的表从主数据库中删除,从而减少主数据库的大小。将未使用的表分离到单独的数据库中还可以提高数据库的性能。

5. 压缩数据库

如果以上所有方法仍然不能缩小SQLite数据库或者您需要极端地减小数据库大小,那么您可以考虑压缩数据库。SQLite数据库可以通过将数据存储在压缩格式中来缩小其体积。要压缩SQLite数据库,请使用以下命令:

“`

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

“`

请注意,压缩数据库可能需要较长时间才能完成,具体取决于数据库的大小以及计算机的性能。

缩小SQLite数据库的方法有很多种,您可以根据具体的情况选择最适合您的方法。无论您使用哪种方法,始终要确保备份了数据,以防止数据丢失。

相关问题拓展阅读:

ios 从哪些方面去做sqlite 数据库的优化

这个是百度经验

SQLite是嵌入式的和轻量级的sql数据库。广泛用纳庆于包括浏览器、ios、Android以及一些便携需求的小型web应用系统。

SQLite是MySQL的精简版,无需服务器就能进行;限制条件:必须手动创建数据库,没有面向对象的接口;

要想在工程中使用SQLite,需要将SQLite的库添加到工程:

在本工程中的.h文件中引用这个库:

创建数据库:

接下来如果该数据库不存在需要创建这个数搜岩据库,创建的过程写在viewDidLoad里面世茄御:

因为SQLite数据库是文件数据库,是保存在文件系统中的,ios下:

Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录

tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除

Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

我们的数据库文件是保存在Documents下的。

切记,因为用的是C语法,sqlite3_open传入的是database的地址!

先来看看.h文件

#import

#import

#define kFilename @”testdb.db”

@class sqlTestList;

@interface sqlService : NSObject {

sqlite3 *_database;

}

@property (nonatomic) sqlite3 *_database;

-(BOOL) createTestList:(sqlite3 *)db;//创建数据库

-(BOOL) insertTestList:(sqlTestList *)insertList;//插入数据

-(BOOL) updateTestList:(sqlTestList *)updateList;//更新数据

-(NutableArray*)getTestList;//获取全部数据

– (BOOL) deleteTestList:(sqlTestList *)deletList;//删除数据:

– (NutableArray*)searchTestList:(NSString*)searchString;//查询数裂做据库,searchID为要查询数据的ID,返回数据为查询到的数据

@end

@interface sqlTestList : NSObject//重新定义了一个类,专门用于存储数据

{

int sqlID;

NSString *sqlText;

NSString *sqlname;

}

@property (nonatomic) int sqlID;

@property (nonatomic, retain) NSString *sqlText;

@property (nonatomic, retain) NSString *sqlname;

@end

再来看看.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目录并返回数据库目录

– (NSString *)dataFilePath{

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

NSString *documentsDirectory = ;

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

return ;//这里很神奇,可以定义成任何类型的文件,也可以不定义成.db文件,任何格式都行,定义成.文件都行,达到了很好的数据隐秘性

}

//创建,打开数据库

– (BOOL)openDB {

//获取数据库路径

NSString *path = ;

//文件管理器亮则

NSFileManager *fileManager = ;

//判断数据库是否存在

BOOL find = ;

//如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)

if (find) {

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

//打开数据库,这里的是将NSString转换为C字符串,因为SQLite3是采用可移植的C(而不是

//Objective-C)编写的,它不知道什么是NSString.

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

//如果打开数据库失败则关闭数据库

sqlite3_close(self._database);

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

return NO;

}

//创建一个新表

;

return YES;

}

//如果发现数据库不存在则利用sqlite3_open创建数据库(上面已经提到过),与上面相同,路径要转换为C字符串

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

//创建一个新表

;

return YES;

} else {

//如果创建并打开数据库失败则关闭数据库

sqlite3_close(self._database);

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

return NO;

}

return NO;

}

//创建表

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

//这句是大家熟悉的SQL语句

char *sql = “create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT, testID int,testValue text,testName text)”;// testID是列名,int 是数据类型,testValue是列名,text是数据类型,是字符串类型

sqlite3_stmt *statement;

//sqlite3_prepare_v2 接口把一条SQL语句解析到statement结构里去. 使用该接口访问数据库是当前比较好的的一种方法

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

//之一个参数跟前面一样,是个sqlite3 * 类型变量,

//第二个参数是一个 sql 语句。

//第三个参数我写的是-1,这个参数含义是前面 sql 语句的长度。如果小于0,sqlite会自动计算它的长度(把sql语句当成以\0结尾的字符串)。

//第四个参数是sqlite3_stmt 的指针的指针。解析以后的sql语句就放在这个结构里。

//第五个参数是错误信息提示,一般不用,为nil就可以了。

//如果这个函数执行成功(返回值是 SQLITE_OK 且 statement 不为NULL ),那么下面就可以开始插入二进制数据。

//如果SQL语句解析出错的话程序返回

if(sqlReturn != SQLITE_OK) {

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

return NO;

}

//执行SQL语句

int success = sqlite3_step(statement);

//释放sqlite3_stmt

sqlite3_finalize(statement);

//执行SQL语句失败

if ( success != SQLITE_DONE) {

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

return NO;

}

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

return YES;

}

//插入数据

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

//先判断数据库是否打开

if () {

sqlite3_stmt *statement;

//这个 sql 语句特别之处在于 values 里面有个? 号。在sqlite3_prepare函数里,?号表示一个未定的值,它的值等下才插入。

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;

}

//这里的数字1,2,3代表上面的第几个问号,这里将三个值绑定到三个绑定变量

sqlite3_bind_int(statement, 1, insertList.sqlID);

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

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

//执行插入语句

success2 = sqlite3_step(statement);

//释放statement

sqlite3_finalize(statement);

//如果插入失败

if (success2 == SQLITE_ERROR) {

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

//关闭数据库

sqlite3_close(_database);

return NO;

}

//关闭数据库

sqlite3_close(_database);

return YES;

}

return NO;

}

//获取数据

– (NutableArray*)getTestList{

NutableArray *array = ;

//判断数据库是否打开

if () {

sqlite3_stmt *statement = nil;

//sql语句

char *sql = “SELECT testID, testValue ,testName FROM testTable”;//从testTable这个表中获取 testID, testValue ,testName,若获取全部的话可以用*代替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 {

//查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值,注意这里的列值,跟上面sqlite3_bind_text绑定的列值不一样!一定要分开,不然会crash,只有这一处的列号不同,注意!

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 ;//定义了自动释放的NSArray,这样不是个好办法,会造成内存泄露,建议大家定义局部的数组,再赋给属性变量。

}

//更新数据

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

if () {

sqlite3_stmt *statement;//这相当一个容器,放转化OK的sql语句

//组织SQL语句

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

//将SQL语句放入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数据库

有两种方法:

一种是把sqlite数据库的源代码(C/c++)编译到你的App中,利用API操作数据库,这种方法饥纳需要C/C++开发App;还可以把sqlite数据库的源代码编译成动态禅肢岁链接库,在其他语言的APP中调贺睁用。

另一种办法是使用继集成了sqlite数据库驱动的系统开发,例如RAD Studio Seattle以后的版本,包括delphi/c++ bulider两种开发工具,可以使用C++/Object Pascal语言进行开发,这个集成环境使用很方便。

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外源磨它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

Android 开发中使用 SQLite 数据库

Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。

创建数据库

Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库春裂戚使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:

构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游扒陵标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

在Android中操作SQLite数据库使用SQLiteDatabase类,使用该类可以对数据库进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作。需要重点掌握的是execSQL()和rawQuery()方法。其中 execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句。

举旦腔一例说明execSQL()使用方法:

SQLiteDatabase mydb = ….;

mydb.execSQL(“乱迟猜insert into person(name, age) values(‘网虫一族’, 23)”);

mydb.close();

从上面简单的例子可以看出,SQLiteDatabase执行的是标准的SQL语哗型句,所以,并不需要额外掌握更多的知识,在帮助文档中熟悉下SQLiteDatabase类的几个方法就可以了。

sqlite数据库 缩小的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于sqlite数据库 缩小,如何缩小SQLite数据库?,ios 从哪些方面去做sqlite 数据库的优化,android怎么操作sqlite数据库的信息别忘了在本站进行查找喔。


数据运维技术 » 如何缩小SQLite数据库? (sqlite数据库 缩小)