iOS 中进行 SQLite 操作
时间:2016-05-29 13:27 来源:linux.it.net.cn 作者:IT
给出完整代码,都是自己做了,已经验证可以工作。运行code之前,先加入libsqlite3.lib 【add from exist framework】.这里的操作主要针对 int 型 数据,其他数据对应的修改即可。
//
// SQLiteDb.h
// Sqlite3Test
//
// Created by podevor@gmail.com on 12-8-17.
// Copyright (c) 2012年 Beijing Interaction Times Network Technology Co.,Ltd. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <sqlite3.h>@interface SQLiteDb : NSObject{
sqlite3 *database;
NSMutableArray *openedMapIndex;
NSString *_tableName;
NSArray* _fieldArray;
NSString *_fieldsList;
}
+(id) initDbHandle;
-(void) openDatabase;
-(void) createTableByNameAndFields:(NSString*)tableName fields:(NSArray*) fieldArray;
-(void) insertData:(id)insertValue;
-(void) deleteData:(id) deleteValue;
-(void) queryData;
-(int) dataCount;
-(int) mapIndexAtOpenedMapIndex:(int)index;
-(void) closeDatabase;
-(void) dealloc;@end
//
// SQLiteDb.m
// Sqlite3Test
//
// Created by podevor@gmail.com on 12-8-17.
// Copyright (c) 2012年 Beijing Interaction Times Network Technology Co.,Ltd. All rights reserved.
//
#import "SQLiteDb.h"
@implementation SQLiteDb
+(id) initDbHandle{
return [[SQLiteDb alloc] init];
}
-(void) openDatabase{
openedMapIndex = [NSMutableArray arrayWithCapacity:10];
_fieldArray = nil;
_fieldsList = nil;
NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
, NSUserDomainMask
, YES);
NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mapopened"];
if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) {
NSLog(@"SQLites is opened.");
}else {
NSLog(@"SQLites open Error.");
}
}
-(void) createTableByNameAndFields:(NSString *)tableName fields:(NSArray*) fieldArray{
if (_fieldArray == nil) {
_fieldArray = [NSArray arrayWithArray:fieldArray];
}
if (_fieldsList != nil) {
_fieldsList = @"";
}
int begin = 0;
if (![_fieldArray containsObject:@"primary key"]) {
_fieldsList = [NSString stringWithFormat:@"%@ %@ %@",[_fieldArray objectAtIndex:0],[_fieldArray objectAtIndex:1],@"primary key"];
begin = 2;
}
for (int i = begin; i < [_fieldArray count]; i++) {
_fieldsList = [NSString stringWithFormat:@"%@ %@",_fieldsList,[_fieldArray objectAtIndex:i]];
}
NSLog(@"%@",_fieldsList);
_tableName = tableName;
char *errorMsg;
// id integer primary key autoincrement,
NSString *createSql= [NSString stringWithFormat:@"create table if not exists %@ ( %@ )",_tableName,_fieldsList];
if (sqlite3_exec(database, [createSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"Create Success.");
}else {
NSLog(@"Create Failure %s",errorMsg);
}
}
-(void) insertData:(id)insertValue{
NSLog(@"Insert Values is :%@",insertValue);
char *errorMsg;
NSString *insertSql= [NSString stringWithFormat:@"insert into %@ values (%d)",_tableName,[insertValue intValue]];
if (sqlite3_exec(database, [insertSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"Insert Success.");
}else {
NSLog(@"Insert Failure %s",errorMsg);
}
}
-(void) deleteData:(id)deleteValue{
NSLog(@"Delete Values is :%@",deleteValue);
char *errorMsg;
NSString *deleteSql= [NSString stringWithFormat:@"delete from %@ where mapIndex = %d",_tableName,[deleteValue intValue]];
if (sqlite3_exec(database, [deleteSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"Delete Success.");
}else {
NSLog(@"Delete Failure %s",errorMsg);
}
}
-(void) queryData{
//clear the openedMap
[openedMapIndex removeAllObjects];
NSString *query = [NSString stringWithFormat:@"select * from %@",_tableName];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
//get data
int index = sqlite3_column_int(statement, 0);
[openedMapIndex addObject:[NSString stringWithFormat:@"%d",index]];
}
sqlite3_finalize(statement);
}
}
-(int) dataCount{
int count = [openedMapIndex count];
NSLog(@"the data count is %d",count);
return count;
}
-(int) mapIndexAtOpenedMapIndex:(int)index{
NSString *value = (NSString*)[openedMapIndex objectAtIndex:index];
return [value intValue];
}
-(void) closeDatabase{
sqlite3_close(database);
}
-(void) dealloc{
// [fieldsList release];
[self closeDatabase];
}@end
使用方法:
sqlitedb = (SQLiteDb *)[SQLiteDb initDbHandle];
[sqlitedb openDatabase];
//field array format: fields name ,fields type, other flag
NSArray *fieldsArray = [NSArray arrayWithObjects:@"username",@"text",@",",@"password",@"text",@",",@"id",@"integer",@",",@"description",@"text", nil];
[sqlitedb createTableByNameAndFields:@"zcq" fields:fieldsArray];
NSString *insertValues = @"12312313";
[sqlitedb insertData:insertValues];
NSString *deleteValues = @"123";
[sqlitedb deleteData:deleteValues];
[sqlitedb queryData];
[sqlitedb dataCount];
for (int i = 0; i < [sqlitedb dataCount]; i++) {
NSLog(@"data %d",[sqlitedb mapIndexAtOpenedMapIndex:i]);
}
[sqlitedb closeDatabase];
(责任编辑:IT)
给出完整代码,都是自己做了,已经验证可以工作。运行code之前,先加入libsqlite3.lib 【add from exist framework】.这里的操作主要针对 int 型 数据,其他数据对应的修改即可。
// // SQLiteDb.h // Sqlite3Test // // Created by podevor@gmail.com on 12-8-17. // Copyright (c) 2012年 Beijing Interaction Times Network Technology Co.,Ltd. All rights reserved. // #import <Foundation/Foundation.h> #import <sqlite3.h>@interface SQLiteDb : NSObject{ sqlite3 *database; NSMutableArray *openedMapIndex; NSString *_tableName; NSArray* _fieldArray; NSString *_fieldsList; } +(id) initDbHandle; -(void) openDatabase; -(void) createTableByNameAndFields:(NSString*)tableName fields:(NSArray*) fieldArray; -(void) insertData:(id)insertValue; -(void) deleteData:(id) deleteValue; -(void) queryData; -(int) dataCount; -(int) mapIndexAtOpenedMapIndex:(int)index; -(void) closeDatabase; -(void) dealloc;@end
// // SQLiteDb.m // Sqlite3Test // // Created by podevor@gmail.com on 12-8-17. // Copyright (c) 2012年 Beijing Interaction Times Network Technology Co.,Ltd. All rights reserved. // #import "SQLiteDb.h" @implementation SQLiteDb +(id) initDbHandle{ return [[SQLiteDb alloc] init]; } -(void) openDatabase{ openedMapIndex = [NSMutableArray arrayWithCapacity:10]; _fieldArray = nil; _fieldsList = nil; NSArray *documentsPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask , YES); NSString *databaseFilePath=[[documentsPaths objectAtIndex:0] stringByAppendingPathComponent:@"mapopened"]; if (sqlite3_open([databaseFilePath UTF8String], &database)==SQLITE_OK) { NSLog(@"SQLites is opened."); }else { NSLog(@"SQLites open Error."); } } -(void) createTableByNameAndFields:(NSString *)tableName fields:(NSArray*) fieldArray{ if (_fieldArray == nil) { _fieldArray = [NSArray arrayWithArray:fieldArray]; } if (_fieldsList != nil) { _fieldsList = @""; } int begin = 0; if (![_fieldArray containsObject:@"primary key"]) { _fieldsList = [NSString stringWithFormat:@"%@ %@ %@",[_fieldArray objectAtIndex:0],[_fieldArray objectAtIndex:1],@"primary key"]; begin = 2; } for (int i = begin; i < [_fieldArray count]; i++) { _fieldsList = [NSString stringWithFormat:@"%@ %@",_fieldsList,[_fieldArray objectAtIndex:i]]; } NSLog(@"%@",_fieldsList); _tableName = tableName; char *errorMsg; // id integer primary key autoincrement, NSString *createSql= [NSString stringWithFormat:@"create table if not exists %@ ( %@ )",_tableName,_fieldsList]; if (sqlite3_exec(database, [createSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) { NSLog(@"Create Success."); }else { NSLog(@"Create Failure %s",errorMsg); } } -(void) insertData:(id)insertValue{ NSLog(@"Insert Values is :%@",insertValue); char *errorMsg; NSString *insertSql= [NSString stringWithFormat:@"insert into %@ values (%d)",_tableName,[insertValue intValue]]; if (sqlite3_exec(database, [insertSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) { NSLog(@"Insert Success."); }else { NSLog(@"Insert Failure %s",errorMsg); } } -(void) deleteData:(id)deleteValue{ NSLog(@"Delete Values is :%@",deleteValue); char *errorMsg; NSString *deleteSql= [NSString stringWithFormat:@"delete from %@ where mapIndex = %d",_tableName,[deleteValue intValue]]; if (sqlite3_exec(database, [deleteSql UTF8String], NULL, NULL, &errorMsg)==SQLITE_OK) { NSLog(@"Delete Success."); }else { NSLog(@"Delete Failure %s",errorMsg); } } -(void) queryData{ //clear the openedMap [openedMapIndex removeAllObjects]; NSString *query = [NSString stringWithFormat:@"select * from %@",_tableName]; sqlite3_stmt *statement; if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { //get data int index = sqlite3_column_int(statement, 0); [openedMapIndex addObject:[NSString stringWithFormat:@"%d",index]]; } sqlite3_finalize(statement); } } -(int) dataCount{ int count = [openedMapIndex count]; NSLog(@"the data count is %d",count); return count; } -(int) mapIndexAtOpenedMapIndex:(int)index{ NSString *value = (NSString*)[openedMapIndex objectAtIndex:index]; return [value intValue]; } -(void) closeDatabase{ sqlite3_close(database); } -(void) dealloc{ // [fieldsList release]; [self closeDatabase]; }@end 使用方法: sqlitedb = (SQLiteDb *)[SQLiteDb initDbHandle]; [sqlitedb openDatabase]; //field array format: fields name ,fields type, other flag NSArray *fieldsArray = [NSArray arrayWithObjects:@"username",@"text",@",",@"password",@"text",@",",@"id",@"integer",@",",@"description",@"text", nil]; [sqlitedb createTableByNameAndFields:@"zcq" fields:fieldsArray]; NSString *insertValues = @"12312313"; [sqlitedb insertData:insertValues]; NSString *deleteValues = @"123"; [sqlitedb deleteData:deleteValues]; [sqlitedb queryData]; [sqlitedb dataCount]; for (int i = 0; i < [sqlitedb dataCount]; i++) { NSLog(@"data %d",[sqlitedb mapIndexAtOpenedMapIndex:i]); } [sqlitedb closeDatabase]; (责任编辑:IT) |