写一个FMDB的分类
#import<FMDB.h>
+(instancetype)sharedDataBase{
staticDataBase*_DBCtl =nil;
if(_DBCtl ==nil) {
_DBCtl = [[DataBasealloc]init];
[_DBCtlinitDataBase];
}
return_DBCtl;
}
创建表格
-(void)initDataBase{
// 获得Documents目录路径
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 文件路径
NSString*filePath = [documentsPathstringByAppendingPathComponent:@"model.sqlite"]; // 实例化FMDataBase对象
_db= [FMDatabasedatabaseWithPath:filePath];
[_dbopen];
// 初始化数据表
NSString *personSql = @"CREATE TABLE 'person' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,'person_id' integer,'person_name' text,'person_age' integer,'person_number'integer) ";
NSString *carSql = @"CREATE TABLE 'car' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,'own_id' integer,'car_id' integer,'car_brand' text,'car_price' real) ";
[_dbexecuteUpdate:personSql];
[_dbexecuteUpdate:carSql];
[_dbclose];
}
另外SQLite 存储数据的类型:
数据类型描述
NULL (null)值是一个 NULL 值
INTEGER (integer)值是一个带符号的整数,根据值的大小存储在1、2、3、4、6 或 8 字节中
REAL (real)值是一个浮点值,存储为 8 字节的 IEEE 浮点数字
TEXT (text)值是一个文本字符串,使用数据库编码UTF-8、UTF-16BE 或 UTF-16LE)存储
BLOB (blob)值是一个 blob 数据,完全根据它的输入存储
BooleanSQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)
曾:
[_dbopen];
[_db executeUpdate:@"INSERT INTO person(person_id,person_name,person_age,person_number)VALUES(?,?,?,?)",maxID,person.name,@(person.age),@(person.number)];
[_db close];
删:
[_dbopen];
[_db executeUpdate:@"DELETE FROM person WHERE person_id = ?",person.ID];
[_db close];
其实我更喜欢用FMDatabaseQueue 因为他是线程安全的,我用FMDatabaseQueue写一个插入1000条数据的方法,先附上图一张,当然也可以用事物来做,大神看到,哪里不足还望指正。

- (FMDatabaseQueue *)dbQueue{
if(!_dbQueue) {
_dbQueue = [FMDatabaseQueue databaseQueueWithPath:@"/Users/gaucho/Desktop/1313/gaouchsGGGGGSQL.sqlite"];
} return _dbQueue;
}
//直接在外部调用这个方法
- (void)insertQueueWithData{
//创建新表
[self addNewData];
//插入新数据 用队列的方式
NSString *nextStr = @"insert into t_myxiaoJJ(name,age) values('白骨精',180)";
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
[self.dbQueueinTransaction:^(FMDatabase*_Nonnulldb,BOOL*_Nonnullrollback) {
NSLog(@"开始插入数据");
BOOLiserror =NO;
for(inti =0; i <1000; i++) {
iserror = [dbexecuteUpdate:nextStr];
}
if(iserror) {
NSLog(@"所有操作成功");
}
}];
CFAbsoluteTimelinkTime = (CFAbsoluteTimeGetCurrent() - startTime);
NSLog(@"运行时间: %f ms", linkTime *1000.0);
}
- (void)addNewData{
[self.dbQueueinDatabase:^(FMDatabase*_Nonnulldb) {
if ([db executeUpdate:@"create table if not exists t_myxiaoJJ(id integer primary key autoincrement, name TEXT not null, age TEXT)" withArgumentsInArray:[NSArray array]]) {
NSLog(@"创建表成功");
}else{
NSLog(@"创建表失败");
}
}];
}
网友评论