[数据存储]Sqlite
来源:互联网 发布:php 源代码 登录 权限 编辑:程序博客网 时间:2024/06/07 06:49
一、sqlite简介。
在ios中,大量的数据存储必然会用到数据库,而默认支持的数据库就是sqlite3这一轻量级数据库,sqlite是广泛应用在移动开发和嵌入式领域的关系型数据库。因为sqlite是由大概3万行C代码写成的,所以ios还是提供了一些接口来直接操作数据库的。
二、sqlite准备活动。
引入framework: libsqlite3.0.dylib。我们发现又两个库文件名很相似,libsqlite3.0.dylib和libsqlite3.dylib,首先说一下他们的差别。
这个文件结构很明显,libsqlite3.0.dylib是一个指向libsqlite3.dylib的链接,之所以有这样一个链接是因为libsqlite3.0.dylib指向的是最新的sqlite库文件,如果库文件有更新,哪天出了个>libsqlite3.5.dylib,如果我们引入工程的是链接的话,就不需要修改,直接会引用到最新的库文件。
然后在数据库操作的类里面,#import <sqlite3.h> 或者 #import"/usr/include/sqlite3.h" 。
三、sqlite操作
1. 数据库打开与关闭。
- (BOOL)openDatabase{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath = [paths objectAtIndex:0]; NSString *dbPath = [documentPath stringByAppendingPathComponent:DBNAME]; if (sqlite3_open([dbPath UTF8String], &_db) != SQLITE_OK) { sqlite3_close(_db); NSLog(@"Can not open data base."); return NO; } return YES;}
sqlite3_close(_db);
创建的方法也是这个,数据库在打开的时候如果发现没有这个文件,那么会创建一个新的。
2. 创建表结构
NSString *createTable = @"CREATE TABLE IF NOT EXISTS person_info (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)"; [self execSql:createTable];- (void)execSql:(NSString *)sql{ char *error; int state = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &error); if (state == SQLITE_OK) { NSLog(@"Success to exec: %s", [sql UTF8String]); sqlite3_close(_db); } else { NSLog(@"Failed to exec: %@. \nError: %@", sql, [NSString stringWithCString:error encoding:NSUTF8StringEncoding]); sqlite3_free(error); sqlite3_close(_db); }}
3. 插入数据
- (BOOL)insertRecordWithName:(NSString *)name age:(NSInteger)age address:(NSString *)address{ [self openDatabase]; NSString *data1 = [NSString stringWithFormat:@"INSERT INTO '%@' (name,age,address) VALUES (?,?,?);", TABLENAME]; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(_db, [data1 UTF8String], -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil); sqlite3_bind_text(stmt, 2, [[NSString stringWithFormat:@"%i", age] UTF8String], -1, nil); sqlite3_bind_text(stmt, 3, [address UTF8String], -1, nil); } if (sqlite3_step(stmt) == SQLITE_DONE) { sqlite3_finalize(stmt); NSLog(@"Success to exec: %@", [NSString stringWithFormat:@"INSERT INTO '%@' (name,age,address) VALUES (%@,%i,%@);", TABLENAME, name, age, address]); sqlite3_close(_db); return YES; } return NO;}
4. 查询数据
- (NSArray *)queryWith:(NSString *)name{ [self openDatabase]; NSString *querySql = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE name = ?", TABLENAME]; sqlite3_stmt *stmt; NSMutableArray *resultArray = [NSMutableArray array]; if (sqlite3_prepare(_db, [querySql UTF8String], -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil); while (sqlite3_step(stmt) == SQLITE_ROW) { char *name = (char *)sqlite3_column_text(stmt, 1); NSString *nameString = [NSString stringWithCString:name encoding:NSUTF8StringEncoding]; int age = sqlite3_column_int(stmt, 2); NSString *ageString = [NSString stringWithFormat:@"%i", age]; char *address = (char *)sqlite3_column_text(stmt, 3); NSString *addressString = [NSString stringWithCString:address encoding:NSUTF8StringEncoding]; [resultArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:nameString, @"name", ageString, @"age", addressString, @"address", nil]]; } NSLog(@"Success to exec: %@", [NSString stringWithFormat:@"SELECT * FROM %@ WHERE name = %@", TABLENAME, name]); } else { return nil; } sqlite3_finalize(stmt); sqlite3_close(_db); return resultArray;}
5. 删除数据
- (BOOL)deleteWith:(NSString *)name{ [self openDatabase]; NSString *sql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE name = ?", TABLENAME]; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil); } if (sqlite3_step(stmt) == SQLITE_DONE) { sqlite3_finalize(stmt); NSLog(@"Success to exec: %@", [NSString stringWithFormat:@"DELETE FROM %@ WHERE name = %@", TABLENAME, name]); sqlite3_close(_db); return YES; } return NO;}
至于更新数据,也就是sql语句的差别了,别的都一样。
基本数据库的操作就这些了,根据实际应用可以封装一下方法,方便调用。
OK,Done.
所有数据存储的例子:http://download.csdn.net/detail/wanghuafeng123456/5891439
- SQLite 的数据存储
- SQLite数据库存储数据
- SQLite大数据存储
- android数据存储--SQLite
- SQLite数据库存储数据
- SQLite数据库存储数据
- SQLite数据库存储数据
- [数据存储]Sqlite
- Android数据存储---SQLite
- SQLite数据库存储数据
- Android数据存储-SQLite
- SQLite数据库存储数据
- SQLite数据库存储数据
- android-数据存储sqlite
- SQLite数据存储
- SQLite数据存储
- 数据存储SQLite
- 数据存储--SQLite事务
- [数据存储]CoreData
- [jtable]JDK SwingSet3 jtable源码
- USB介绍
- iphone ios uiview uilabel 边框,圆角,阴影实现
- NoSQL数据库:Redis内存使用优化与存储
- [数据存储]Sqlite
- Apache POI 3.8 (SXSSFWorkbook) - Unreadable Content
- MFC对话框中控件字体颜色的设置
- NoSQL数据库:Redis内存使用优化与存储
- vs 2008 断点空心加感叹号 解决方案
- [数据存储] NSUserDefaults & NSKeyedArchiver
- ios开发之UISwipeGestureRecognizer手势识别
- HDU 1279验证角谷猜想
- 使用json-lib进行Java和JSON之间的转换