一鼓作气,今天继续学习了sqlite数据库在Xcode上的一些操作,主要是通过用oc代码进行salite表格的创建,删除,修改;以及对现有的表格数据进行增,删,改,查。虽然有点累,但是收获不小,感觉很充实,继续加油!

//把数据库sqlite3导入到工程(在Bulider Phrase 中的Linker中点击➕号,查找sqlite3文件,选择再添加即可)

//打开数据库

//提供C的字符串,c串时我们要打开数据库的完整路径和文件名

NSString *path=NSHomeDirectory();//获得家的路径

path=[path stringByAppendingPathComponent:@"mydb.sqlite"];

NSLog(@"%@",path);

sqlite3 *db;

//打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

sqlite3_open([path UTF8String], &db);

int result=sqlite3_open([path UTF8String], &db);

//判断打开数据库是否成功

if (result!=SQLITE_OK) {

NSLog(@"打开失败!");

}

//关闭数据库

sqlite3_close(db);

//提供C的字符串,c串时我们要打开数据库的完整路径和文件名

NSString *path1=NSHomeDirectory();//获得家的路径

path1=[path1 stringByAppendingPathComponent:@"mydb.sqlite"];

sqlite3 *mydb;//创建一个数据库名叫mydb

//打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

sqlite3_open([path UTF8String], &mydb);

//对数据库进行操作

//定制一个sql表

char *sql="create table if not exists t_student(name text,age integer)";

char *err;//出错信息

//运行sql,并返回运行结果

result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

//判断运行是否成功

if (result!=SQLITE_OK) {

NSLog(@"运行sql错误,error原因:%s",err);

}

/*

//增

NSString *name=self.nameText.text;

NSString *age=self.ageText.text;

//sql="insert into t_student(name,age) values('张三',22) ";

NSString *sql1=[NSString stringWithFormat:@"insert into t_student(name,age) values('%@',%@)",name,age];

//将OC的字符串转化为C字符串

//[sql1 UTF8String];

//运行sql,并返回运行结果

result=sqlite3_exec(mydb,[sql1 UTF8String],NULL,NULL,&err);

if (result!=SQLITE_OK)

{

NSLog(@"运行sql错误,error原因:%s",err);

}

*/

/*

//增,(可以插入特殊字符,用绑定的方式)

NSString *name=self.nameText.text;

NSString *age=self.ageText.text;

char *sql2="insert into t_student(name,age) values(?,?) ";

sqlite3_stmt *stmt;//stmt本身为指向行的指针,故该定义为一个指向指针的指针,即表示一个二维数组

//运行sql,并返回运行结果

result=sqlite3_prepare_v2(mydb,sql2,-1,&stmt,NULL);

if (result==SQLITE_OK)

{

// 绑定参数

result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

//判断绑定姓名是否成功

if (result!=SQLITE_OK) {

NSLog(@"绑定姓名失败!!!");

}

// 绑定参数

result=sqlite3_bind_int(stmt, 2, [age intValue]);

//判断绑定姓名是否成功

if (result!=SQLITE_OK) {

NSLog(@"绑定年龄失败!!!");

}

}

if (sqlite3_step(stmt)!=SQLITE_DONE)

{

NSLog(@"插入数据失败!!!");

}

sqlite3_finalize(stmt);

*/

/*

//删

sql="delete from t_student where age=26";

//运行sql,并返回运行结果

result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

//判断运行是否成功

if (result!=SQLITE_OK) {

NSLog(@"运行sql错误,error原因:%s",err);

}

*/

/*

//删除,用绑定的方式

NSString *name=self.nameText.text;

//NSString *age=self.ageText.text;

sqlite3_stmt *stmt;

char * sql3="delete from t_student where name=?";

//运行sql,并返回运行结果

result=sqlite3_prepare_v2(mydb, sql3, -1, &stmt, NULL);

//判断运行是否成功

if (result==SQLITE_OK)

{

// 绑定参数

result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

//判断绑定姓名是否成功

if (result!=SQLITE_OK) {

NSLog(@"绑定姓名失败!!!");

}

else

{

// 绑定参数

result=sqlite3_step(stmt);

//判断绑定姓名是否成功

if(result!=SQLITE_DONE)

{

NSLog(@"删除失败!!!");

}

}

}

else

{

NSLog(@"绑定失败!!!");

}

sqlite3_finalize(stmt);

*/

/*

//改

sql="update t_student set name='赵六' where age=22 ";

//运行sql,并返回运行结果

result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

//判断运行是否成功

if (result!=SQLITE_OK)

{

NSLog(@"运行sql错误,error原因:%s",err);

}

*/

//修改,用绑定的方式

char *sql4="update t_student set name=? where age=?";

NSString *name=self.nameText.text;

NSString *age=self.ageText.text;

BOOL bFlag=NO;

sqlite3_stmt *stmt;

result=sqlite3_prepare_v2(mydb, sql4 , -1, &stmt ,NULL);

if (result==SQLITE_OK) {

result=sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);

if (result!=SQLITE_OK) {

NSLog(@"绑定姓名失败!!!");

bFlag=YES;

}

result=sqlite3_bind_int(stmt, 2, [age intValue]);

if (result!=SQLITE_OK) {

NSLog(@"绑定年龄失败!!!");

bFlag=YES;

}

if (bFlag==NO) {

result=sqlite3_step(stmt);

if (result!=SQLITE_DONE) {

NSLog(@"修改失败!!!");

}

}

}

else

{

NSLog(@"预处理失败(准备运行失败 )!!!");

}

//查

sql="select * from t_student";

result=sqlite3_prepare_v2(mydb, sql , -1, &stmt ,NULL);

if (result==SQLITE_OK)

{

//遍历返回的结构

while(sqlite3_step(stmt)==SQLITE_ROW)//的到返回结构的一行

{

char*name=(char*)sqlite3_column_text(stmt, 0);//的到返回结构的一列,其中0代表第一列,依次类推

int age=sqlite3_column_int(stmt, 1);//的到返回结果的第二列

NSString *strname=[NSString stringWithUTF8String:name];

NSLog(@"name=%@,age=%d",strname,age);

}

}

else

{

NSLog(@"预处理失败");

}

sqlite3_finalize(stmt);//释放层数占用的资源

sqlite3_close(mydb);

sqlite学习的更多相关文章

  1. SQLite学习笔记(七)&&事务处理

    说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...

  2. Sqlite学习笔记(四)&&SQLite-WAL原理

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  3. SQLite学习手册(目录)

    链接地址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...

  4. Sqlite学习笔记(四)&&SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  5. SQLite学习手册

    在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特 ...

  6. SQLite 学习笔记

    SQLite 学习笔记. 一.SQLite 安装    访问http://www.sqlite.org/download.html下载对应的文件.    1.在 Windows 上安装 SQLite. ...

  7. SQLite学习手册(转)

    原文网址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...

  8. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  9. SQlite 学习资料

      很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFo ...

随机推荐

  1. SQL Server Reporting Service(SSRS) 第三篇 SSRS Matrix用法

    以前不是太清楚SSRS的功能,自从最近有了了解之后,发现它的功能的确很强大.对于Matrix,刚开始我竟不知道它到底有什么用,现将通过一个例子中去理解Matrix,以及和分组Group结合使用的便利性 ...

  2. ATC空管系统的实时控制软件系统分析

    什么是ATC空管系统? 空中交通管制的目的是对航空器的空中活动进行有效的管理,维护空中交通秩序,保障空中交通畅通,保证飞行安全和提高飞行效率,防止航空器相撞,防止机场及其附近空域的航空器同障碍物相撞. ...

  3. 撤销git reset soft head操作

    一不小心在eclipse的git库中执行了Reset Soft(HEAD ONLY)操作,不料界面中竟然没有找到撤销方法(于是心中五味俱全,经过一番折腾,无果还是回归Git本身),最终通过命令行,很快 ...

  4. Windows下 Maven 使用 阿里云镜像配置

    新建或者修改文件: C:\Users\user\.m2\settings.xml <settings xmlns="http://maven.apache.org/SETTINGS/1 ...

  5. Jekyll x Liquid 控制文章列表只显示特定类别的Post

    使用Liquid按照Category或者Tag过滤Post List 文章首发于szhshp的第三边境研究所(szhshp.org), 转载请注明 前段时间画了一些漫画,考虑把漫画相关的Post放到另 ...

  6. laravel 安装完成后安装 vendor 目录

    composer  install 就是将composer.js 中的配置下载安装 生成vendor目录

  7. DynamicsCRM中的自动保存

    DynamicsCRM的自动保存功能 在DynamicsCRM2013开始,引入了自动保存功能. 保存一条记录 在新建一条记录的时候, 你必须在左上角手动点击保存按钮.如下图: 当保存完后,会发现,左 ...

  8. 《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节

    在.Net4.0中引入了一个关键字dynamic,这是一个动态类型关键字.Net中还有一个关键字是var,这是一个隐式类型,可以定义本地变量,此时var所代表的实际的数据类型有编译器在初次分配时决定, ...

  9. rtc关机闹钟2 Alarm manager

    public void set(int type, long triggerAtMillis, long windowMillis, long intervalMillis, PendingInten ...

  10. CentOS5.4 搭建Hadoop2.5.2伪分布式环境

    简介: Hadoop是处理大数据的主要工具,其核心部分是HDFS.MapReduce.为了学习的方便,我在虚拟机上搭建了一个伪分布式环境,来进行开发学习. 一.安装前准备: 1)linux服务器:Vm ...