Sqlite 数据库、FMDB 简单使用

前端之家收集整理的这篇文章主要介绍了Sqlite 数据库、FMDB 简单使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、 通过sqlite创建数据库。首先导入框架;
//创建数据库的路径;
NSString *path = [[ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ) lastObject ] stringByAppendingPathComponent : @"data.sqlite" ];

//第一个参数是C类型的字符创。表示路径;第二个参数表示数据库的地址;是 @H_404_62@sqlite3 类型,返回的参数可以做为是否创建成功的依据;
int success =@H_404_62@sqlite3_open(path.@H_404_62@UTF8String,&@H_404_62@_db);

//创建表:使用create关键字。非查询语句都使用这个函数 sqlite3_exec
if (success == sqlITE_OK) {
//创建表;加上条件判断 if not exists;如果不存就创建; 不加有可能会报错;
//表table:在创建的时候,一定要设置primary key(主键),并且主键不能频繁更改,且与数据无关;
@H_404_62@ NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,score REAL DEFAULT 60.0);";

int successT = sqlite3_exec ( _db ,sql. UTF8String ,255)"> NULL ,255)"> NULL );
}

//增加数据:使用insert 关键字;
NSString *sql = [ NSString stringWithFormat : @"INSERT INTO t_student (name,score) VALUES ('%@',%f);" ,name,175)">arc4random_uniform (8000)/100.0 + 20];
int success = @H_404_62@ sqlite3_exec(@H_404_62@_db,sql.NULL,255)">NULL);

//删除数据:使用delete 关键字;where 是设置条件;这里是 score > 90的删除
@H_404_62@NSString *sql = @"DELETE FROM t_student WHERE score > 90.0;";
NULL);

//更新/修改数据:使用update 和 set 关键字;
@"UPDATE t_student SET score = 59.9 WHERE score < 60;";
NULL);

//查询数据:使用 select 关键字, Like是模糊查询,% 是通配符,这里是查询名字里包含 8 这个字符的学生;
@"SELECT id,score FROM t_student WHERE name LIKE '%8%'";
// 期望 结果保存在 stmt 里面
@H_404_62@sqlite3_stmt *stmt = nil;
准备查询 其实 查询结果保存在 指针区域中
/*参数的含义:
sqlite3 *db,数据库的句柄
const char *zsql,sql语句
int nByte,sql语句的最大长度 -1代表无限制;
sqlite3_stmt **ppStmt, 输出: Statement 句柄 获取最终的结果数据
const char **pzTail
输出: 保留参数
*/
sqlite3_prepare_v2( NULL);
sqlITE_OK) {
// 一步步获取每一条 step 拿一条数据 sqlITE_ROW 证明成功拿到数据
while ( sqlite3_step (stmt) == sqlITE_ROW ) {
// id 0 name 1 score 2 获取一行中每一列的数据;
const char *name = ( const char *) sqlite3_column_text (stmt,1);
double score = sqlite3_column_double (stmt,2);
NSLog ( @" 姓名 :%@ 成绩 :%f" ,[ stringWithUTF8String :name],score);
}
}


1、FMDB数据库的创建, FMDB 是对于sqlite的一个封装;是基于对象的;
@"datafmdb.sqlite" ];
@H_404_62@FMDatabase *database = [@H_404_62@FMDatabase @H_404_62@databaseWithPath:path];
self . database = database;
BOOL success = [database @H_404_62@ open]; //同过返回值确定是否打开数据库

2、建表语句,插入,删除,更新都是只用如下方法
BOOL successT= [self.@H_404_62@database @H_404_62@executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT,score REAL);"];

3、查询语句:
//创建sql语句
score FROM t_student WHERE score > 60 AND score < 75;";
FMResultSet *result = [ database executeQuery :sql];
while ([result next ]) {
//name TEXT
@H_404_62@NSString *name = [result @H_404_62@ stringForColumnIndex:1];
//score DOUBLE
double score = [result doubleForColumnIndex :2];
}

注意:FMDB封装了一套线程安全的数据库
@H_404_62@NSString *path = [[@H_404_62@NSSearchPathForDirectoriesInDomains(@H_404_62@NSDocumentDirectory,@H_404_62@NSUserDomainMask,YES)@H_404_62@lastObject] @H_404_62@stringByAppendingPathComponent:@"data.sqlite"];
@H_404_62@FMDatabaseQueue *queue = [@H_404_62@FMDatabaseQueue @H_404_62@databaseQueueWithPath:path];
self . queue = queue;
[ queue inDatabase :^( FMDatabase *db) {
// block 内部的就是线程安全,只所有sql语句都写在这个闭包里面;
BOOL success = [db @H_404_62@open];
if (success) {
// 查询语句都是用 executeUpdate
BOOL successT= [db executeUpdate : score REAL); ];
}
}];

//事务的开启,当一段数据修改需要一起执行。但是执行一部分之后,程序崩溃了或者停电了;剩下的修改语句不能进行。数据就有可能出错;事务就有这样一个功能,被包装成事务的一段代码,要么全部执行,要么都不执行;就可以避免这种情况;

[queue @H_404_62@inDatabase:^(@H_404_62@FMDatabase *db) {
// 开启事务 在这条语句之后的都是一个事务
[db @H_404_62@ beginTransaction];
//插入需要更新的语句;
//[db @H_404_62@ rollback]; 这是执行手动回滚;
[db commit ];
}];

猜你在找的Sqlite相关文章