sqlite学习
一鼓作气,今天继续学习了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学习的更多相关文章
- SQLite学习笔记(七)&&事务处理
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite学习手册(目录)
链接地址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...
- Sqlite学习笔记(四)&&SQLite-WAL原理(转)
Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...
- SQLite学习手册
在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特 ...
- SQLite 学习笔记
SQLite 学习笔记. 一.SQLite 安装 访问http://www.sqlite.org/download.html下载对应的文件. 1.在 Windows 上安装 SQLite. ...
- SQLite学习手册(转)
原文网址:http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328757.html 在实际的应用中,SQLite作为目前最为流行的开源嵌 ...
- sqlite学习笔记7:C语言中使用sqlite之打开数据库
数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...
- SQlite 学习资料
很有用的开源跨平台数据库,可以作为客户端的小型内存数据库使用,据说它有N多用户(Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFo ...
随机推荐
- 对象排序,compareTo
第一个例子 /*为了比较,让自己的类实现Comparable接口,按照自己想要的排序方式重写compareTo *Map只是提供了对键的排序,但是当我们需要对值排序时就的提供我们自己的比较器 这里 只 ...
- Alpha版本十天冲刺--Day6
会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 获取帖子接口,url图片解析 无 获取帖子详情接口,发帖接口 这两天都是白天睡大觉,晚上敲代码,感觉得调一下作息了,假期更加爱赖床了,还得继 ...
- loadrunner json
Action(){ web_custom_request("JRPT_WriteLog", //VuGen中树形视图中显示的名称 "Url=url", //请求 ...
- c3p0连接池获得的Connection执行close方法后是否真的销毁Connection对象?
问题描述: jfinal做的api系统中,在正常调用接口一段时间后,突然再调用接口的时候,该请求无响应api系统后台也无错误信息 (就是刚开始接口调用是正常的,突然就无响应了) 于是啊,就开始找错误. ...
- (42) Aeroo 模板实战
用writer设计一个采购单的模板 我用的是libreoffice 5.2.x 对于这个表格是通过工具栏上的插入指定的表格行和列完成,然后排版 对于单号po00001 这这样插入的 这样就完成一个订单 ...
- JAVA方法03之动手动脑问题解决
动手动脑1.当JAVA里定义的函数中去掉static后,怎么办?(如下程序,将square()函数的static去掉) public class SquareIntTest { public stat ...
- 关于android的@TargetApi和@SuppressLint("NewApi")
看别人的代码好多地方用到了@TargetApi.以前一直不知道这个是什么意思.后面偶然看了下sdk.才有所明白. 其实这个东西就是在你使用了android Lint检查工具的时候,为了防止代码出现提示 ...
- SharePoint Foundation 2013 安装出错
前段时间装foundation 13的时候遇到这个问题.怀疑是Office的问题.然后找了一些资料,问题得到了解决 解决方案: 运行 regedit,删除注册表下的office的LicenseType ...
- tab切换-2016.6.4
以前的tab切换,一般都是自己找网上的源代码,不知道含义,直接套,然后会有一些不知道的问题出现. 最近学习了jq(当然属于懒人的我,学习进度很慢),然后再工作中遇到了tab选项卡,所以决定自己写一个. ...
- uiimage 上传 数据库
之前我所接触的上传图片都是直接与服务器交互的,即 app端要做的就是上传到服务器 现在这个项目却是app先上传到"数据库",由"数据库"传到服务端 下面说主题 ...