SQLite3数据库
来源:互联网 发布:工具书中的网络词语 编辑:程序博客网 时间:2024/05/22 04:34
SQLite3采用SQLite数据库存储数据
支持SQL语句,方便查询
插件:MesaSQLite
//// ViewController.m// SQLiteTest//// Created by jerehedu on 15/2/2.// Copyright (c) 2015年 jereh. All rights reserved.//#import "ViewController.h"//1.导入SQLite3头文件#import <sqlite3.h>
@interface ViewController (){ //2.声明SQLite3对象 sqlite3 *db;}@end
#pragma mark 获得沙盒路径- (NSString *)getUserDocumentPath{ //获得沙盒路径 NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = [path lastObject]; return documentPath;}
#pragma mark 追加路径- (NSString *)appendingPathComponent:(NSString *)documentPath andFileName:(NSString *)fileName{ NSString *sqlitePath = [documentPath stringByAppendingPathComponent:fileName]; return sqlitePath;}
#pragma mark 创建或打开数据库-(BOOL)openOrCreateSQLiteWithDBPath:(NSString *)dbpath{ const char *p = [dbpath UTF8String]; int res = sqlite3_open(p, &db); if (res == SQLITE_OK) { return YES; }else{ return NO; }}
#pragma mark 执行sql语句-(BOOL)execSQLNoQueryWithSQL:(NSString *)sql{ int res = sqlite3_exec(db, [sql UTF8String], NULL, NULL, NULL); if (res == SQLITE_OK){ return YES; }else{ return NO; }}
#pragma mark 返回stmt,无参数-(sqlite3_stmt *)execQueryWithSQL:(NSString *)sql{ sqlite3_stmt *stmt; int pre_res = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL); if (pre_res == SQLITE_OK){ return stmt; } return NULL;}
#pragma mark 有参数-(sqlite3_stmt *)execQueryWithSQL:(NSString *)sql andWithParams:(NSArray *)params{ sqlite3_stmt *stmt; int pre_res = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL); if (pre_res == SQLITE_OK){ //绑定参数 //判断参数列表是否为空 if (params != nil) { //循环绑定参数 for (int i = 0; i < params.count; i++) { // sqlite3_bind_int(stmt, i+1, [params[i] intValue]); //要判断参数类型 id obj = params[i]; if (obj == nil) { sqlite3_bind_null(stmt, i+1); } else if ([obj respondsToSelector:@selector(objCType)]){ //respondsToSelector判断对象是否包含objCType方法(数字有) //strstr(char *,char *)判断是否在char中出现过 if (strstr("ilsILS", [obj objCType])) { sqlite3_bind_int(stmt, i+1, [obj intValue]); }else if (strstr("fd", [obj objCType])) { sqlite3_bind_double(stmt, i+1, [obj doubleValue]); }else{ stmt = NULL; } }else if ([obj respondsToSelector:@selector(UTF8String)]){ sqlite3_bind_text(stmt, i+1, [obj UTF8String], -1, NULL); }else{ stmt = NULL; } } } return stmt; } return NULL;}
@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad];//获得沙盒路径 NSString *dbPath; dbPath = [self getUserDocumentPath]; NSString *sqlitePath; sqlitePath = [self appendingPathComponent:dbPath andFileName:@"test.sqlite"];//追加路径(实际不存在) NSLog(@"%@",dbPath);//5.判断是否打开成功 if ([self openOrCreateSQLiteWithDBPath:sqlitePath]) { NSLog(@"db is open"); //构造SQL语句 NSString *sql = @"create table if not exists demo(d_id integer primary key autoincrement,d_name varchar(20))"; int exec_res = sqlite3_exec(db, [sql UTF8String], NULL, NULL, NULL); if (exec_res == SQLITE_OK) { NSLog(@"table is created"); } /* 参数: 1.sqlite3 对象 2.sql语句 3.回调函数 4.回调函数的参数 5.错误信息 */ //插入记录,构造sql语句 NSString *insert_sql = @"insert into demo(d_name) values ('zhangziyao')";if ([self execSQLNoQueryWithSQL:insert_sql]) { NSLog(@"one recoder is inserted"); } //修改 NSString *update_sql = @"update demo set d_name = 'chenyi' where d_id = 1";if ([self execSQLNoQueryWithSQL:update_sql]) { NSLog(@"one recoder is updated"); } //删除 NSString *delete_sql = @"delete from demo where d_name='wuyuqiu'";if ([self execSQLNoQueryWithSQL:delete_sql]) { NSLog(@"one recoder is deleted"); } //查询int search_d_id = 3; NSString *search_name = @"_h%"; NSString *search_sql = @"select * from demo where d_id>? and d_name like ?";sqlite3_stmt *stmt;if ([self execQueryWithSQL:search_sql]) { stmt = [self execQueryWithSQL:search_sql andWithParams:@[[NSNumber numberWithInt: search_d_id],search_name]]; while (sqlite3_step(stmt) == SQLITE_ROW) { int d_id = sqlite3_column_int(stmt, 0); const unsigned char *d_name = sqlite3_column_text(stmt, 1); NSString *name = [NSString stringWithUTF8String:(char*)d_name]; NSLog(@"id=%d,name=%@",d_id,name); _idLabel.text = [NSString stringWithFormat:@"id=%d",d_id]; _nameLabel.text = [NSString stringWithFormat:@"name=%@",name]; } } //释放stmt sqlite3_finalize(stmt); //关闭数据库 sqlite3_close(db); NSNumber *n = [NSNumber numberWithDouble:1.0]; NSLog(@"%s",[n objCType]); }}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
0 0
- sqlite3数据库
- SQLite3数据库
- sqlite3 数据库
- SQLite3数据库
- 数据库sqlite3
- Sqlite3数据库
- sqlite3数据库
- Sqlite3数据库
- Sqlite3数据库
- 使用小型数据库SQLite3
- 访问sqlite3数据库
- Sqlite数据库sqlite3命令
- SQLite3 数据库基本操作
- SQLite3 - 数据库临时文件
- sqlite3数据库操作
- sqlite3数据库使用
- Sqlite数据库sqlite3命令
- Adroid数据库--SQLite3
- 关于baidu地图使用c#WebBrowser滑轮不能响应的原因
- 0和1的世界之“在迷茫中寻求出路”
- android 超轻量级的ORM框架
- 在SAE的Python工程上使用MySQL
- Python 使用单链表实现队列 (基于class, 包含迭代器)
- SQLite3数据库
- ios错误收集
- 【整理】为什么要写博客
- Hadoop 使用场景
- 各种控件的开源项目
- 用javascript获取屏幕高度和宽度等信息
- android ListView包含CheckBox时滑动丢失选中状态的解决
- 标准C++中的string类的用法总结
- Struts跳转后CSS页面样式失效