sqlite3

前端之家收集整理的这篇文章主要介绍了sqlite3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
写了一个比较简单的sqlite3的简单demo只实现了增加 更新 删除 获取全部数据 查找 数据库部分有详细注释 界面也比较简陋主要是实现一下数据库部分


资源地址:http://download.csdn.net/detail/decemberd/3899232


部分代码如下:

//@H_403_14@获取document@H_403_14@目录并返回数据库目录

- (NSString@H_403_14@*)dataFilePath{

@H_403_14@

@H_403_14@@H_403_14@NSArray@H_403_14@*paths =@H_403_14@NSSearchPathForDirectoriesInDomains(@H_403_14@NSDocumentDirectory,@H_403_14@NSUserDomainMask,@H_403_14@YES@H_403_14@);@H_403_14@

@H_403_14@NSString@H_403_14@*documentsDirectory = [pathsobjectAtIndex@H_403_14@:0@H_403_14@];

@H_403_14@@H_403_14@return@H_403_14@[documentsDirectory@H_403_14@stringByAppendingPathComponent:@H_403_14@kFilename@H_403_14@];@H_403_14@

@H_403_14@

}


//@H_403_14@创建,打开数据库

- (BOOL@H_403_14@)openDB {

@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@获取数据库路径

@H_403_14@NSString@H_403_14@*path = [self@H_403_14@dataFilePath@H_403_14@];

@H_403_14@@H_403_14@//@H_403_14@文件管理器

@H_403_14@@H_403_14@NSFileManager*fileManager = [@H_403_14@NSFileManager@H_403_14@defaultManager@H_403_14@];@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@判断数据库是否存在

@H_403_14@BOOL@H_403_14@find = [fileManagerfileExistsAtPath@H_403_14@:path];

@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@如果数据库存在,则用sqlite3_open@H_403_14@直接打开(不要担心,如果数据库不存在sqlite3_open@H_403_14@会自动创建)

@H_403_14@if@H_403_14@(find) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Database file have already existed.");@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//打开数据库,这里的@H_403_14@[path UTF8String]是将@H_403_14@NSString转换为@H_403_14@C字符串,因为@H_403_14@sqlite3是采用可移植的@H_403_14@C(而不是@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//Objective-C)编写的,它不知道什么是@H_403_14@NSString.

@H_403_14@@H_403_14@if@H_403_14@(sqlite3_open@H_403_14@([pathUTF8String@H_403_14@],&_database@H_403_14@) !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//@H_403_14@如果打开数据库失败则关闭数据库

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@self@H_403_14@.@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: open database file.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@创建一个新表

@H_403_14@@H_403_14@[@H_403_14@self@H_403_14@@H_403_14@createTestList:@H_403_14@self@H_403_14@.@H_403_14@_database];@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

@H_403_14@}

@H_403_14@@H_403_14@//@H_403_14@如果发现数据库不存在则利用sqlite3_open@H_403_14@创建数据库(上面已经提到过),与上面相同,路径要转换为C@H_403_14@字符串

@H_403_14@@H_403_14@if@H_403_14@(@H_403_14@sqlite3_open([path@H_403_14@UTF8String],&@H_403_14@_database@H_403_14@) ==@H_403_14@sqlITE_OK@H_403_14@) {@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@创建一个新表

@H_403_14@@H_403_14@[@H_403_14@self@H_403_14@@H_403_14@createTestList:@H_403_14@self@H_403_14@.@H_403_14@_database];@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

}else@H_403_14@{

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@如果创建并打开数据库失败则关闭数据库

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@self@H_403_14@.@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: open database file.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

}

@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

}


//@H_403_14@创建表

- (BOOL@H_403_14@) createTestList:(sqlite3@H_403_14@*)db {

@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@这句是大家熟悉的sql@H_403_14@语句

@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"create table if not exists testTable(ID INTEGER PRIMARY KEY AUTOINCREMENT,testID int,testValue text)";@H_403_14@

@H_403_14@

@H_403_14@sqlite3_stmt@H_403_14@*statement;

@H_403_14@@H_403_14@//sqlite3_prepare_v2接口把一条@H_403_14@sql语句解析到@H_403_14@statement结构里去@H_403_14@.使用该接口访问数据库是当前比较好的的一种方法@H_403_14@

@H_403_14@NSInteger@H_403_14@sqlReturn =sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,sql,-1@H_403_14@,&statement,nil@H_403_14@);

@H_403_14@@H_403_14@//@H_403_14@第一个参数跟前面一样,是个sqlite3 *@H_403_14@类型变量,

@H_403_14@@H_403_14@//@H_403_14@第二个参数是一个sql@H_403_14@语句。

@H_403_14@@H_403_14@//@H_403_14@第三个参数我写的是-1@H_403_14@,这个参数含义是前面sql@H_403_14@语句的长度。如果小于0@H_403_14@,sqlite@H_403_14@会自动计算它的长度(把sql@H_403_14@语句当成以\0@H_403_14@结尾的字符串)。

@H_403_14@@H_403_14@//@H_403_14@第四个参数是sqlite3_stmt@H_403_14@的指针的指针。解析以后的sql@H_403_14@语句就放在这个结构里。

@H_403_14@@H_403_14@//@H_403_14@第五个参数我也不知道是干什么的。为nil@H_403_14@就可以了。

@H_403_14@@H_403_14@//@H_403_14@如果这个函数执行成功(返回值是sqlITE_OK@H_403_14@且statement@H_403_14@不为NULL@H_403_14@),那么下面就可以开始插入二进制数据。

@H_403_14@

@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@如果sql@H_403_14@语句解析出错的话程序返回

@H_403_14@if@H_403_14@(sqlReturn !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to prepare statement:create test table");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@}

@H_403_14@

@H_403_14@@H_403_14@//执行@H_403_14@sql语句@H_403_14@

@H_403_14@int@H_403_14@success =sqlite3_step@H_403_14@(statement);

@H_403_14@@H_403_14@//释放@H_403_14@sqlite3_stmt

@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@

@H_403_14@@H_403_14@//执行@H_403_14@sql语句失败@H_403_14@

@H_403_14@if@H_403_14@( success !=sqlITE_DONE@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to dehydrate:create table test");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@}

@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Create table 'testTable' successed.");@H_403_14@

@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

}


//@H_403_14@插入数据

-(BOOL@H_403_14@) insertTestList:(sqlTestList@H_403_14@*)insertList {

@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@先判断数据库是否打开

@H_403_14@if@H_403_14@([self@H_403_14@openDB@H_403_14@]) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@sqlite3_stmt@H_403_14@*statement;

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@这个sql@H_403_14@语句特别之处在于values@H_403_14@里面有个?@H_403_14@号。在sqlite3_prepare@H_403_14@函数里,?@H_403_14@号表示一个未定的值,它的值等下才插入。

@H_403_14@@H_403_14@@H_403_14@static@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"INSERT INTO testTable(testID,testValue) VALUES(?,?)";@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@int@H_403_14@success2 =sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,NULL@H_403_14@);

@H_403_14@@H_403_14@if@H_403_14@(success2 !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to insert:testTable");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@这里的数字1@H_403_14@,2@H_403_14@,3@H_403_14@代表第几个问号,这里将两个值绑定到两个绑定变量

@H_403_14@@H_403_14@sqlite3_bind_int@H_403_14@(statement,1@H_403_14@,insertList.sqlID@H_403_14@);

@H_403_14@@H_403_14@sqlite3_bind_text@H_403_14@(statement,2@H_403_14@,[insertList.sqlText@H_403_14@UTF8String@H_403_14@],sqlITE_TRANSIENT@H_403_14@);


@H_403_14@@H_403_14@@H_403_14@//@H_403_14@执行插入语句

@H_403_14@@H_403_14@success2 =sqlite3_step@H_403_14@(statement);

@H_403_14@@H_403_14@@H_403_14@//释放@H_403_14@statement

@H_403_14@@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@如果插入失败

@H_403_14@@H_403_14@if@H_403_14@(success2 ==sqlITE_ERROR@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to insert into the database with message.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//关闭数据库@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@关闭数据库

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

@H_403_14@}

@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

}


//@H_403_14@获取数据

- (NSMutableArray@H_403_14@*)getTestList{

@H_403_14@

@H_403_14@@H_403_14@NSMutableArray*array = [@H_403_14@NSMutableArray@H_403_14@arrayWithCapacity@H_403_14@:@H_403_14@10@H_403_14@];@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@判断数据库是否打开

@H_403_14@if@H_403_14@([self@H_403_14@openDB@H_403_14@]) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@sqlite3_stmt@H_403_14@*statement =nil@H_403_14@;

@H_403_14@@H_403_14@@H_403_14@//sql语句@H_403_14@

@H_403_14@@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"SELECT testID,testValue FROM testTable";@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@if@H_403_14@(sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,NULL@H_403_14@) !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to prepare statement with message:get testValue.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@else@H_403_14@{

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//@H_403_14@查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

@H_403_14@@H_403_14@@H_403_14@while@H_403_14@(sqlite3_step@H_403_14@(statement) ==sqlITE_ROW@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlTestList@H_403_14@* sqlList = [[sqlTestList@H_403_14@alloc@H_403_14@]init@H_403_14@] ;

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlList.sqlID@H_403_14@ =sqlite3_column_int@H_403_14@(statement,0@H_403_14@);

@H_403_14@@H_403_14@@H_403_14@@H_403_14@char@H_403_14@* strText = (char@H_403_14@*)sqlite3_column_text@H_403_14@(statement,1@H_403_14@);

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlList.sqlText@H_403_14@= [NSString@H_403_14@stringWithUTF8String@H_403_14@:strText];

[arrayaddObject@H_403_14@:sqlList];

@H_403_14@@H_403_14@@H_403_14@@H_403_14@[sqlListrelease@H_403_14@];

@H_403_14@@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@}

@H_403_14@

@H_403_14@return@H_403_14@[arrayretain@H_403_14@];

}


//@H_403_14@更新数据

-(BOOL@H_403_14@) updateTestList:(sqlTestList@H_403_14@*)updateList{

@H_403_14@

@H_403_14@if@H_403_14@([self@H_403_14@openDB@H_403_14@]) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@我想下面几行已经不需要我讲解了,嘎嘎@H_403_14@

@H_403_14@@H_403_14@sqlite3_stmt@H_403_14@*statement;

@H_403_14@@H_403_14@@H_403_14@//组织@H_403_14@sql语句@H_403_14@

@H_403_14@@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"update testTable set testValue = ? WHERE testID = ?";@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//将@H_403_14@sql语句放入@H_403_14@sqlite3_stmt中@H_403_14@

@H_403_14@@H_403_14@int@H_403_14@success =sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,NULL@H_403_14@);

@H_403_14@@H_403_14@if@H_403_14@(success !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to update:testTable");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@这里的数字1@H_403_14@,2@H_403_14@,3@H_403_14@代表第几个问号。这里只有1@H_403_14@个问号,这是一个相对比较简单的数据库操作,真正的项目中会远远比这个复杂

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@当掌握了原理后就不害怕复杂了

@H_403_14@@H_403_14@sqlite3_bind_text@H_403_14@(statement,[updateList.sqlText@H_403_14@UTF8String@H_403_14@],sqlITE_TRANSIENT@H_403_14@);

@H_403_14@@H_403_14@sqlite3_bind_int@H_403_14@(statement,updateList.sqlID@H_403_14@);

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@执行sql@H_403_14@语句。这里是更新数据库

@H_403_14@@H_403_14@success =sqlite3_step@H_403_14@(statement);

@H_403_14@@H_403_14@@H_403_14@//释放@H_403_14@statement

@H_403_14@@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@如果执行失败

@H_403_14@@H_403_14@if@H_403_14@(success ==sqlITE_ERROR@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to update the database with message.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//关闭数据库@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@执行成功后依然要关闭数据库

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

@H_403_14@}

@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

}

//@H_403_14@删除数据

- (BOOL@H_403_14@) deleteTestList:(sqlTestList@H_403_14@*)deletList{

@H_403_14@if@H_403_14@([self@H_403_14@openDB@H_403_14@]) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@sqlite3_stmt@H_403_14@*statement;

@H_403_14@@H_403_14@@H_403_14@//组织@H_403_14@sql语句@H_403_14@

@H_403_14@@H_403_14@@H_403_14@static@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"delete from testTable where testID = ? and testValue = ?";@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//将@H_403_14@sql语句放入@H_403_14@sqlite3_stmt中@H_403_14@

@H_403_14@@H_403_14@int@H_403_14@success =sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,NULL@H_403_14@);

@H_403_14@@H_403_14@if@H_403_14@(success !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to delete:testTable");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@这里的数字1@H_403_14@,2@H_403_14@,3@H_403_14@代表第几个问号。这里只有1@H_403_14@个问号,这是一个相对比较简单的数据库操作,真正的项目中会远远比这个复杂

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@当掌握了原理后就不害怕复杂了

@H_403_14@@H_403_14@sqlite3_bind_int@H_403_14@(statement,deletList.sqlID@H_403_14@);

@H_403_14@@H_403_14@sqlite3_bind_text@H_403_14@(statement,[deletList.sqlText@H_403_14@UTF8String@H_403_14@],sqlITE_TRANSIENT@H_403_14@);

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@执行sql@H_403_14@语句。这里是更新数据库

@H_403_14@@H_403_14@success =sqlite3_step@H_403_14@(statement);

@H_403_14@@H_403_14@@H_403_14@//释放@H_403_14@statement

@H_403_14@@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@如果执行失败

@H_403_14@@H_403_14@if@H_403_14@(success ==sqlITE_ERROR@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to delete the database with message.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//关闭数据库@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@@H_403_14@//@H_403_14@执行成功后依然要关闭数据库

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@return@H_403_14@YES;@H_403_14@

@H_403_14@}

@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@

}

//@H_403_14@查询数据

- (NSMutableArray@H_403_14@*)searchTestList:(int@H_403_14@)searchID{

@H_403_14@

@H_403_14@@H_403_14@NSMutableArray*array = [@H_403_14@NSMutableArray@H_403_14@arrayWithCapacity@H_403_14@:@H_403_14@10@H_403_14@];@H_403_14@

@H_403_14@@H_403_14@//@H_403_14@判断数据库是否打开

@H_403_14@if@H_403_14@([self@H_403_14@openDB@H_403_14@]) {

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@sqlite3_stmt@H_403_14@*statement =nil@H_403_14@;

@H_403_14@@H_403_14@@H_403_14@//sql语句@H_403_14@

@H_403_14@@H_403_14@@H_403_14@char@H_403_14@*sql =@H_403_14@"SELECT testID,testValue FROM testTable WHERE testID = ?";@H_403_14@

@H_403_14@@H_403_14@

@H_403_14@@H_403_14@if@H_403_14@(sqlite3_prepare_v2@H_403_14@(_database@H_403_14@,NULL@H_403_14@) !=sqlITE_OK@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@NSLog@H_403_14@(@H_403_14@@"Error: Failed to prepare statement with message:search testValue.");@H_403_14@

@H_403_14@@H_403_14@@H_403_14@@H_403_14@return@H_403_14@NO;@H_403_14@

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@else@H_403_14@{

@H_403_14@@H_403_14@@H_403_14@sqlite3_bind_int@H_403_14@(statement,searchID);

@H_403_14@@H_403_14@@H_403_14@@H_403_14@//@H_403_14@查询结果集中一条一条的遍历所有的记录,这里的数字对应的是列值。

@H_403_14@@H_403_14@@H_403_14@while@H_403_14@(sqlite3_step@H_403_14@(statement) ==sqlITE_ROW@H_403_14@) {

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlTestList@H_403_14@* sqlList = [[sqlTestList@H_403_14@alloc@H_403_14@]init@H_403_14@] ;

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlList.sqlID@H_403_14@ =sqlite3_column_int@H_403_14@(statement,1@H_403_14@);

@H_403_14@@H_403_14@@H_403_14@@H_403_14@sqlList.sqlText@H_403_14@= [NSString@H_403_14@stringWithUTF8String@H_403_14@:strText];

[arrayaddObject@H_403_14@:sqlList];

@H_403_14@@H_403_14@@H_403_14@@H_403_14@[sqlListrelease@H_403_14@];

@H_403_14@@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@}

@H_403_14@@H_403_14@@H_403_14@sqlite3_finalize(statement);@H_403_14@

@H_403_14@@H_403_14@@H_403_14@sqlite3_close(@H_403_14@_database@H_403_14@);@H_403_14@

@H_403_14@}

@H_403_14@

@H_403_14@return@H_403_14@[arrayretain@H_403_14@];

}

猜你在找的Sqlite相关文章