// 错误存储路径

- (NSString *)dataFilePath{

NSString *dbPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

NSString *db_absoluteString = [dbPath stringByAppendingPathComponent:@"personal.db"]; // 找到personal.db数据库

NSLog(@"db_absoluteString: %@",db_absoluteString);

return db_absoluteString; // 返回数据库的路径

}

//插入数据

- (NSString *)insertDBFilePath{

NSString *dbPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

NSString *db_absoluteString = [dbPath stringByAppendingPathComponent:@"cmread.sqlite"];

// NSLog(@"db_absoluteString: %@",db_absoluteString);

return db_absoluteString;

}

//获得所有个人信息

- (NSMutableArray *)getStoredPersons{

// 打开数据库

// UTFString格式

//  数据文件路径

if(sqlite3_open([[self dataFilePath] UTF8String],&database) !=SQLITE_OK){

sqlite3_close(database); // 关闭数据库

NSLog(@"open database failed!");

return nil;

}

NSMutableArray *array = [[NSMutableArray alloc] init];

NSString *query = [[NSString alloc] initWithFormat: @"select zaccountname,zlastlogintime,zlogincount from zLoginRecord order by zlastlogintime desc"];

sqlite3_stmt *statement;

if(sqlite3_prepare_v2(database, [query UTF8String],-1,&statement,nil) == SQLITE_OK){

while(sqlite3_step(statement) == SQLITE_ROW){

CMLoginRecord *loginRecord = [[CMLoginRecord alloc] init];

char *loginRecordKey = (char *)sqlite3_column_text(statement, 0);

if (loginRecordKey == NULL) {

loginRecord.accountname = nil;

}else {

NSString *_loginRecord = [[NSString alloc] initWithUTF8String:loginRecordKey];

loginRecord.accountname = _loginRecord;

}

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

if (lastlogintimeKey == NULL) {

loginRecord.lastlogintime = nil;

}else {

NSString *_lastlogintime = [[NSString alloc] initWithUTF8String:lastlogintimeKey];

loginRecord.lastlogintime = _lastlogintime;

}

int logincount = sqlite3_column_int(statement, 2);

loginRecord.logincount = @(logincount);

[array addObject:loginRecord];

}

sqlite3_finalize(statement);

}

sqlite3_close(database);

return array;

}

// 插入个人信息

- (NSInteger)insertPersonl:(NSMutableArray *)array{

BOOL isInsertSuccess = NO;

// 打不开的话,就关闭

if(sqlite3_open([[self insertDBFilePath] UTF8String],&database) !=SQLITE_OK){

sqlite3_close(database);

return 1;

}

char *insert = "insert into zAccount(zaccountname,zlastlogintime,zlogincount) values(?,?,?);";// 要记住分号

for (CMLoginRecord *loginRecord in array) {

sqlite3_stmt *stmt;

if(sqlite3_prepare_v2(database,insert,-1,&stmt,nil) == SQLITE_OK){

sqlite3_bind_text(stmt, 1, [loginRecord.accountname UTF8String],-1,NULL);

sqlite3_bind_text(stmt, 2, [loginRecord.lastlogintime UTF8String],-1,NULL);

sqlite3_bind_int(stmt, 3, [loginRecord.logincount intValue]);

}

if(sqlite3_step(stmt)!= SQLITE_DONE){

NSLog(@"Error insert data into zLoginRecord error !");

}else{

//删除原来的数据库

isInsertSuccess = YES;

}

sqlite3_finalize(stmt);

}

sqlite3_close(database);

if (isInsertSuccess) {

NSString *path = [self dataFilePath];

NSFileManager *fileManager = [NSFileManager defaultManager];

if ([fileManager fileExistsAtPath:path]) {

[fileManager removeItemAtPath:path error:nil];

}

NSLog(@"删除原来的数据库");

}

return 0;

}

SQLite常用语句的更多相关文章

  1. Sqlite常用sql语句

    sqlite常用sql语句 --返回UTC时间 select CURRENT_TIMESTAMP; --返回本地时间 select datetime(CURRENT_TIMESTAMP,'localt ...

  2. iOS开发数据库篇—SQLite常用的函数

    iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 * ...

  3. ORM数据库框架 SQLite 常用数据库框架比较 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Sqlite 常用函数推荐

    Sqlite 常用函数 1 .打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建.第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构 ...

  5. sqlite常用的命令-增删改查

    一.查看版本信息: #sqlite3 -version 二.sqlite3常用命令 1.当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识: 2. ...

  6. SQLite 常用函数

    SQLite 常用函数 参考: SQLite 常用函数 | 菜鸟教程http://www.runoob.com/sqlite/sqlite-functions.html SQLite 常用函数 SQL ...

  7. sqlmap选项卡介绍及常用语句

    sqlmap的使用方式:python sqlmap.py [options]: sqlmap中一共有以下十六个选项卡: 1.帮助选项卡: 2.Target(目标选项卡): 3.Request(请求选项 ...

  8. SQLite入门语句之HAVING和DISTINCT

    一.SQLite入门语句之HAVING HAVING 子句允许指定条件来过滤将出现在最终结果中的分组结果. WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建 ...

  9. SQL server 常用语句

    SQL Server中常用的SQL语句   1.概述 2.查询概述 3.单表查询 4.连接查询 5.带有exists的相关子查询 6.SQL的集合操作 7.插入操作 8.删除操作 9.修改操作 10. ...

随机推荐

  1. codeforces 723E (欧拉回路)

    Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...

  2. Android模拟器Genymotion如何访问本地服务器?

    Genymotion能否访问到本地服务器,其实与Genymotion本身并无太大关系.Genymotion作为VirtualBox中的一个虚拟OS运行,所以它访问网络的方式与其他VirtualBox中 ...

  3. Unity3D–RectTransfrom 记录笔记

    一.基本要点 部分来源:http://www.2fz1.com/post/unity-ugui-recttransform/ RectTransform继承于Trasnfrom , 在Trasnfor ...

  4. Unity3D-ScrollRect 各参数的代码引用以及作用

    版本Unity4.6: 以下为ScrollRect面板上各选项 对应 在代码里的属性: content(RectTransform): scrollRect的RectTransform组件,即滑动面板 ...

  5. 在 Java 代码中对 Kerberos 主体进行身份验证

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 本文举例说明如何使用 org.apache.hadoop.security.UserGroupInformation 类在 ...

  6. Oracle cmd 导出数据库或者表定义或者纯数据

    实例: expdp zypacs/Sfx371482@zyrisdb schemas=ZYPACS content=metadata_only CONTENT={ALL | DATA_ONLY | M ...

  7. css background-size

    先来看下语法:background-size: length|percentage|cover|contain;具体的值,百分比都ok,w3c上面说的很清楚,当时具体的值或者百分比的时候,第一个表示宽 ...

  8. jquery/js分割数组

    substr(star[,length]);//star起始位置 length截取的长度 substring(star,end);//star起始位置,end结束位置 都是以0开始的索引值

  9. iOS面试题汇总

    摘要:1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通 ...

  10. CSS定位类型

    在CSS里面布局是相当重要的,二在这一周了,学习了一些定位,很少用到,用了更好的方式浮动.BFC.IFC等去解决问题. 而也我也对定位的概念不那么熟练运用. 初步的定位类型 1.静态定位(static ...