IOS sqlite 基础

1,导入libsqlite3.0.dylib库

文件中:#import"sqlite3.h"


2,创建数据库

#define kDocDir [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

#define dbPath [kDocDir stringByAppendingPathComponent:@"test.db"]


sqlite3 *db;

if (sqlite3_open([dbPath UTF8String], &db) !=SQLITE_OK) {

    sqlite3_close(db);

    NSAssert(0,@"数据库打开失败。");

    return;

}


3,创建表table1, 三个不同类型的字段id是整形,name是字符串,image是二进制

char *sqlStr ="CREATE TABLE table1 (id integer, name text, image blob)";

sqlite3_stmt *statement;

if(sqlite3_prepare_v2(db, sqlStr, -1, &statement,nil) !=SQLITE_OK) {

    NSLog(@"Error: failed to prepare statement:create table1");

    return;

}

int success = sqlite3_step(statement);

sqlite3_finalize(statement);

if ( success != SQLITE_DONE) {

    NSLog(@"Error: failed to dehydrate:CREATE TABLEtable1");

    return;

}


4,插入数据,注意问号的个数要和参数匹配

int idvalue;

NSString *namevalue";

NSData *image;


sqlStr = "INSERT INTO table1 VALUES(?,?,?)";

int success = sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL);

if (success != SQLITE_OK) {

     NSLog(@"Error: failed to insert into table1");

}

sqlite3_bind_int(statement, 1, [idvalue integerValue]);//第二个参数从1开始,与后面查询数据的时候有区别

sqlite3_bind_text(statement, 2, [namevalue UTF8String], -1,SQLITE_TRANSIENT);

sqlite3_bind_blob(statement, 3, [image bytes], (int)[image length],SQLITE_TRANSIENT);   

   

success = sqlite3_step(statement);

sqlite3_finalize(statement);

        

if (success == SQLITE_ERROR) {

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

     return;

}


5, 查询数据

sqlStr = "SELECT * FROM table1";

if (sqlite3_prepare_v2(db, sqlStr, -1, &statement,NULL) !=SQLITE_OK) {

    NSLog(@"Error: failed to prepare statement with message:gettable1.");

    return;

}

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

while (sqlite3_step(statement) ==SQLITE_ROW) {

     int tempint=sqlite3_column_int(statement, 0);//这里要从0开始,注意与插入的时候序号的区别


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

    NSString *tempstr=temp?[NSString stringWithUTF8String:temp]:@"";


    int length=sqlite3_column_bytes(statement,2);//获取到二进制的数据的长度

    Byte* bytes=(Byte*)sqlite3_column_blob(statement,2);

    NSData *data=[NSData dataWithBytes:byteslength:length];

}

 

6,关闭数据库   

sqlite3_close(db);


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值