// 0.拼接数据库存放的沙盒路径
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSString *sqlFilePath = [path stringByAppendingPathComponent:@"student.txt"];
// 1.通过路径创建数据库
FMDatabase * db = [FMDatabase databaseWithPath:sqlFilePath];
self.db = db;
// NSLog(@"%@\n%@",path,sqlFilePath);
if ([self.db open]) {
NSLog(@"打开成功");
BOOL success = [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 1)"];
if (success) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
} else {
NSLog(@"打开失败");
}
//插入数据
- (void)addDataToSqlite{
age++;
BOOL success = [self.db executeUpdate:@"INSERT INTO t_student (name,age) VALUES (?,?);",@"jack",@(age)];
if (success) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败");
}
}
//删除数据
- (void)deleteDataFromSqlite{
// 删除数据
BOOL success = [self.db executeUpdate:@"DELETE FROM t_student WHERE age > 15 AND age < 25;"];
if (success) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
//修改数据
- (void)changeDataFromSqlite{
// 修改数据
BOOL success = [self.db executeUpdate:@"UPDATE t_student SET name = 'liwx' WHERE age > 12 AND age < 15;"];
if (success) {
NSLog(@"修改成功");
} else {
NSLog(@"修改失败");
}
}
//查询数据
- (void)watchDataFromSqlite{
//如果要查询范围 在最后面添加 WHERE age > 15
FMResultSet * result = [self.db executeQuery:@"SELECT id, name, age FROM t_student "];
while ([result next]) {
int ID = [result intForColumnIndex:0];
NSString *name = [result stringForColumnIndex:1];
int age_resule = [result intForColumn:@"age"];
NSLog(@"--------ID: %zd, name: %@, age: %zd", ID, name, age_resule);
}
}
FMDatabaseQueue数据库队列基本使用
使用FMDatabaseQueue类在多线程中执行多个查询或更新是线程安全的.