博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite3-增删改查 转载并修改
阅读量:4115 次
发布时间:2019-05-25

本文共 3326 字,大约阅读时间需要 11 分钟。

网上有许多关于SQLite的文章,但是都没有看到这种 增删改查 都具备的文章,今有幸看到,故转这在这里。

转自  http://tr4work.blog.163.com/blog/static/1371493142010199296820/

也会附上一些常用的方法!代码全部可以运行!

#import "db.h" // (下面只引用了这个实现文件,没有上传头文件,分析一下即可)

//db.h文件中需要#import "sqlite3.h",项目需要导入sqlite3库。在这个目录下面,/Xcode3.1.4/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib/libsqlite3.0.dylib


@implementation db

@synthesize info;

-(NSString*) paths

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMaskYES);

NSString *documentDirectory = [paths objectAtIndex:0];

return [documentDirectory stringByAppendingFormat:@"data.sqlite3"];//数据库文件地址,如果不存在会自动创建

}

-(int) create//创建表方法。sql语句部分和普通SQL语句几乎完全一样

{

int result = sqlite3_open([[self pathsUTF8String], &database);//需要打开数据库

const char *sql = "create table if not exists info(id integer primary key, inf integer);";

char *errorMsg;

int success = sqlite3_exec(database, sql, NULL,NULL,&errorMsg);//执行操作。除了select外其他的都用sqlite3_exec,select用sqlite3_prepare_v2。

sqlite3_close(database);//关闭数据库

//sqlite3.m里面定义了很多状态码。每个代码块里面的success result都是接受的状态码。

if(success == SQLITE_OK)//判断是否执行成功,true则成功,反之..也可以用result来查看数据库打开的时候是否成功。在测试的时候经常要用道这些状态码。完成测试之后可以不使用success之类的。

return 22;

else 

return 33;

}

//插入一条数据,下面部分就差不多了。查询会重新说

-(int) insert

{

int result = sqlite3_open([[self pathsUTF8String], &database);

const char *sql = "insert into info(id,inf) values((select MAX(id) from info)+1,11);";

char *errorMsg;

int success = sqlite3_exec(database, sql, NULL,NULL,&errorMsg);

sqlite3_close(database);

if(success == SQLITE_OK)

return 22;

else 

return 33;

}

-(int) update

{

int result = sqlite3_open([[self pathsUTF8String], &database);

const char *sql = "update info set inf = 99 where id = 2;";

char *errorMsg;

int success = sqlite3_exec(database, sql, NULL,NULL,&errorMsg);

sqlite3_close(database);

if(success == SQLITE_OK)

return 22;

else 

return 33;

}

-(int) deletes

{

int result = sqlite3_open([[self paths] UTF8String], &database);

const char *sql = "delete from info where id = 2;";

char *errorMsg;

int success = sqlite3_exec(database, sql, NULL,NULL,&errorMsg);

sqlite3_close(database);

if(success == SQLITE_OK)

return 22;

else 

return 33;

}

-(NSString*) selects//对于熟悉jdbc的朋友来说,这里的理解要容易的多,这里有点想jdbc

{

int result = sqlite3_open([[self paths] UTF8String], &database);

char *sql = "SELECT * FROM info where id = 2";

sqlite3_stmt *statement;

int success = (sqlite3_prepare_v2(database, sql, -1, &statement, NULL));

int ids;

int inf;

int signs = 0;

//逐行取出检索出来的数据。0,1是一条纪录中的字段,例如我的表里有两个字段,id,inf,那么一条纪录中0位置是id,1位置是inf,如果在sql语句中进行了指定,则按照sql语句中的来,只是要从0开始。signs是我要用的数据,大家可忽略

while (sqlite3_step(statement) == SQLITE_ROW) {

ids = sqlite3_column_int(statement, 0);

inf = sqlite3_column_int(statement, 1);

signs = 1;

}

sqlite3_finalize(statement);

sqlite3_close(database);

if(success == SQLITE_OK)

if(signs ==1)

return [[NSString alloc] initWithFormat:@"%i==%i",ids,inf];

else 

return @"there is no data!";

else 

return [[NSString alloc] initWithFormat:@"%ierror%i",ids,inf];

}

@end

有些时候,大家的sql并不是都想我的例子中的一样简单,可以有些里面还参杂了变量,那么我们一般的做法是

NSString *str = [[NSString alloc] initWithFormat:@"%i",11];

但是str是不在sqlite3中执行的。我们需要用char类型的。这个原因我好像忘记了....

类型转换的例子:

NSString *str = [[NSString alloc] initWithFormat: @"SELECT * FROM infos WHERE year = %i and month = %i and day = %i",year,month,day];

char *sql = [str UTF8String];

转载地址:http://iqwpi.baihongyu.com/

你可能感兴趣的文章
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>