sqlite3语句

//
<span style="font-family: Arial, Helvetica, sans-serif;">static Data * data;</span>

static FMDatabase * dataBase;


+(instancetype)shardData{   

static dispatch_once_tonceToken;   

dispatch_once(&onceToken,^{       

data = [[Data alloc]init];       

[datainitData];   });   

return data;

}



+(instancetype)allocWithZone:(struct _NSZone*)zone{ 

if (data == nil){       

data = [superallocWithZone:zone];   

}   return data;

}//imageName;//imagee   kkid


在操作数据库之前,首先要打开数据库。这个函数打开一个sqlite数据库文件的连接并且返回一个数据库连接对象。这个操作同时程序中的第一个调用的sqlite函数,同时也是其他sqlite api的先决条件。许多的sqlite接口函数都需要一个数据库连接对象的指针作为它们的第一个参数。

//创建表

-(void)initData{

    //获取数据库的路径   

NSString *strpath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];  

//拼接路径   

NSString *path = [strpath stringByAppendingString:@"FMDB.TABLE"];       

//初始化数据表   

dataBase = [[FMDatabase alloc]initWithPath:path];  

//打开数据库  

if ([dataBase open]) {       

NSLog(@"打开成功");       

[dataBase executeUpdate:@"create table Mondel(kkid integer primary key autoincrement,imageName text,imagee text)"];    }    else   {        NSLog(@"打开失败");    }

}


假如这个要被打开的数据文件不存在,则一个同名的数据库文件将被创建。如果使用sqlite3_open和sqlite3_open_v2的话,数据库将采用UTF-8的编码方式,sqlite3_open16采用UTF-16的编码方式

//添加
-(BOOL)insertData:(Model *)mmoo{   

//打开数据库   

[dataBase open];   

//创建插入语句   

BOOL result = [dataBase executeUpdate:@"insert into Mondel(imageName,imagee)values(?,?)",mmoo.imageName,UIImagePNGRepresentation(mmoo.imagee)];  

if (result) {        NSLog(@"添加成功");    }    else    {        NSLog(@"添加失败");    }       

//关闭数据库   

[dataBase close];      

return result;}



这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅仅为执行准备这个sql语句


//删除

 -(BOOL)deleteData:(NSInteger)iidd{   

//打开数据库   

[dataBase open];   

//创建删除语句   

BOOL result =[dataBase executeUpdateWithFormat:@"delete from Mondel where kkid = %ld",iidd];   

if (result) {        NSLog(@"删除成功");    }        else    {        NSLog(@"删除失败");            }           

//关闭数据库    

[dataBase close];   

return result;}​


nByte:如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。如果nBytes非负,zSql在第一次遇见’/000/或’u000’的时候终止.如果用户知道被传入的 sql 语句是以 '\0' 结尾的, 那么有一个更好的做法是:把nbytes的值设为该字符串的长度(包含'\0'), 这样可以避免 SQLite 复制该字符串的一份拷贝, 以提高程序的效率.

pzTail:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符。如果 pszTail 不为 NULL, 则 *pszTail 指向 sql 中第一个被传入的 SQL 语句的结尾. 该函数只编译 sql 的第一个语句, 所以 *pszTail 指向的内容则是未被编译的.

ppStmt:能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL,如假如输入的文本不包括sql语句。调用过程必须负责在编译好的sql语句完成使用后使用sqlite3_finalize()删除它


//更新

-(BOOL)updataData:(Model*)mmoo{

    //打开数据库   

[dataBase open];   

//创建修改语句  

BOOL result = [dataBase executeUpdateWithFormat:@"update Mondel set imageName = %@,imagee = %@ where kkid = %ld",mmoo.imageName,UIImagePNGRepresentation(mmoo.imagee),mmoo.kkid];   

if (result) {        NSLog(@"修改成功");    }    else    {        NSLog(@"修改失败");    }   

//关闭数据库   

[dataBase close];       

return result;}


在sqlite中并没有定义sqlite3_stmt这个结构的具体内容,它只是一个抽象类型,在使用过程中一般以它的指针进行操作,而sqlite3_stmt类型的指针在实际上是一个指向Vdbe的结构体得指针


//查询

-(NSMutableArray *)selectData{

    //打开数据库   

[dataBase open];   

//创建查找语句   

FMResultSet *resultset = [dataBase executeQuery:@"select *from Mondel"];

   NSMutableArray *Marr = [NSMutableArray array];   

while ([resultset next]) {       

Model *mon = [[Model alloc]init];       

mon.kkid = [resultset intForColumn:@"kkid"];      

mon.imagee = [UIImage imageWithData:[resultset dataForColumn:@"imagee"]];      

mon.imageName = [resultset stringForColumn:@"imageName"];      

[Marr addObject:mon];           

}

    return Marr;}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值