sqlite常用语法 增删 修改 例子

  1 例子:有个学生类数据库studentDb.sqlite,使用sqlite进行增减修改操作
  2 一般时候想要操作数据库,需要先建立连接。我先新建一个Db类作为数据连接类(Db*)
  3 在做以前一定要先导入libsqlite3.dylib框架  拽进studentDb.sqlite文件
  4 *********Db.h
  5 #import
  6 #import //导入数据库文件
  7 @interface Db : NSObject
  8 +(sqlite3*)openDb;//声明打开数据库方法声明
  9 @end
 10 *********Db.m
 11 #import "Db.h"
 12 @implementation Db
 13 //开启数据连接函数,得到可用的数据连接对象
 14 +(sqlite3*)openDb
 15 {
 16     static sqlite3 *stuDb;//表示与studentDb的连接
 17     NSString *begainPath=[[NSBundle mainBundle]pathForResource:@"studentDb" ofType:@"sqlite"];//NSBundle目录下的东西是不能修改的,将studentDb从沙盒的bundle目录复制到docment目录
 18     NSString *targetPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
 19     NSString *targetFile=[targetPath stringByAppendingPathComponent:@"studentDb.sqlite"];//生成studentDb在Document文件的路径(本人理解,不知是否准确)
 20     //创建文本管理器对象,辅助做文件管理
 21     NSFileManager *am=[NSFileManager defaultManager];
 22     //判断该文件是否存在
 23     if (![am fileExistsAtPath:targetFile])//若文件不存在就复制文件到指定目录
 24     {
 25         NSError *error;
 26         [am copyItemAtPath:begainPath toPath:targetFile error:&error];
 27         NSLog(@"%@",error);
 28     }
 29     sqlite3_open([targetFile UTF8String], &stuDb);
 30     return stuDb;
 31 }
 32
 33 @end
 34
 35
 36 //创建一个类作为数据映射类
 37 ******************新建一个类(Student*)
 38 Student.h文件
 39 #import
 40 包含以下属性
 41 @property(retain,nonatomic)NSString*sname;
 42 @property(assign,nonatomic)int sage;
 43 @property(retain,nonatomic)NSData*simage;
 44 @property(assign,nonatomic)int sid;
 45
 46 Student.m文件
 47 #import "Student.h"
 48 #import "Db.h"
 49 @implementation Student
 50 @synthesize sname,sage,simage,sid;
 51
 52 //1.数据库的全表查询
 53 +(NSMutableArray*) findall//返回表中所有记录
 54 {
 55     NSMutableArray* stuArray=nil;//存储查询结果 结果是数组类型  在这里只声明不开辟空间 等用的时候再开辟(节省空间)
 56     sqlite3 *sqlite=[Db OpenDb];//打开数据库  并且定义了一个指针sqlite指向dbpoint所指向的区域(数据库)
 57     sqlite3_stmt *stmt=nil;//定义一个指向sql语句的指针对象
 58     int flag=sqlite3_prepare_v2(sqlite, "select * from stu", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象  sqlite:数据库 -1:系统自动算出要存的sql语句的长度(也可以自己给出) &stmt:一个指向sql语句的内存的地址  nil:sql语句中没有用到的一部分(一般为空) 返回值为一个int(宏)SQLITE_OK 0  SQLITE_ERROR 1
 59     if (flag==SQLITE_OK) //预编译成功
 60     {
 61         stuArray=[[NSMutableArray alloc]init];//为数组开辟空间
 62         while (sqlite3_step(stmt)==SQLITE_ROW) //开始指向第一行的上面 判断下一行是否存在(存在:做准备指针移到下一行)(不存在:跳出循环)
 63         {
 64             int sid1=sqlite3_column_int(stmt, 0);//获取表中当前行第一列的值
 65             int sage=sqlite3_column_int(stmt, 2);
 66             NSString *sname1=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];//获取当前表中当前行第二列的值
 67             //sqlite3_column_text(stmt, 1):返回的是一个无符号c字符串  (const char *)进行强转为有符号c字符串  stringWithUTF8String:将一个c字符串转为nsstring类型
 68             int length=sqlite3_column_bytes(stmt,3);//获取二进制数据的长 sqlite3_column_bytes():获取当前行某一列的所占内存的字节数
 69             NSData *img1=[NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:length]; //将二进制数据转换位NSData对象
 70             //sqlite3_column_blob(stmt, 2):返回的是byte型(c) dataWithBytes:length:将(c)二进制转为nsdata(oc)
 71
 72             //定义一个(Student*)对象并将从数据库取来的数据赋值给对象的相应属性
 73             Student *stu=[[Student alloc]init];//实例化
 74             stu.sid=sid1;
 75             stu.sname=sname1;
 76             stu.simage=img1;
 77             stu.sage=sage;
 78             [stuArray addObject:stu];//将一个对象存入数组
 79             [stu release];//释放对象
 80         }
 81     }
 82     sqlite3_finalize(stmt);//回收stmt对象
 83     return [stuArray autorelease];//返回包含学生信息的数组  并设为自动释放
 84 }
 85 //2.通过姓名或者学号查询
 86 *注意这里学号是主键所以肯定查回来是有唯一确定的(Student*)对象
 87 +(Student*) findbysid:(int) sid
 88 {
 89     Student *stu;//用于返回的学生对象
 90     sqlite3 *sqlite=[Db OpenDb];//打开数据库
 91     sqlite3_stmt *stmt=nil;//定义sql语句对象
 92     int flag=sqlite3_prepare_v2(sqlite, "select * from tblstudent where stuid=?", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象
 93     if (flag==SQLITE_OK)
 94     {
 95         sqlite3_bind_int(stmt, 1, sid);//给问号占位符赋值
 96         while (sqlite3_step(stmt)==SQLITE_ROW)//因为一个学号肯定对应一个学生所以这里其实只执行一次
 97         {
 98             //根据列顺序(从零开始)
 99             int sid=sqlite3_column_int(stmt, 0);//取整型数据
100             int sage=sqlite3_column_int(stmt, 2);
101             NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];//取nsstring数据
102             int length=sqlite3_column_bytes(stmt,3);//获取二进制数据的长度
103             NSData *img=[NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:length]; //将二进制数据转换位NSData对象
104             //将从数据库中查询来的数据存到(Student*)对象中,用于返回
105             stu=[[Student alloc]init];//此时开辟空间节省内存
106             stu.sid=sid;
107             stu.sname=sname;
108             stu.simage=img;
109             stu.sage=sage;
110         }
111     }
112     sqlite3_finalize(stmt);//回收stmt对象
113     return [stu autorelease];//返回包含学生信息的对象
114 }
115 *注意这里一般学生姓名并不是唯一标示所以可能会查到多条记录符合条件所以要返回一个数组来存储符合条件的(Student*)对象  但现在我们的数据库不涉及重名的事例所以这里只返回学生对象
116 +(Student*) findbysname:(NSString*)sname
117 {
118     Student *stu;//用于返回的学生对象
119     sqlite3 *sqlite=[Db OpenDb];//打开数据库
120     sqlite3_stmt *stmt=nil;//定义sql语句对象
121     int flag=sqlite3_prepare_v2(sqlite, "select * from tblstudent where stuname=?", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象
122     if (flag==SQLITE_OK)
123     {
124         sqlite3_bind_text(stmt, 1, [sname UTF8String], -1, nil);//给问号占位符赋值
125         while (sqlite3_step(stmt)==SQLITE_ROW)
126         {
127             //根据列顺序(从零开始)
128             int sid=sqlite3_column_int(stmt, 0);//取整型数据
129             int sage=sqlite3_column_int(stmt, 2);
130             NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];//取nsstring数据
131             int length=sqlite3_column_bytes(stmt,3);//获取二进制数据的长度
132             NSData *img=[NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:length]; //将二进制数据转换位NSData对象
133             stu=[[Student alloc]init];//此时开辟空间节省内存
134             stu.sid=sid;
135             stu.sname=sname;
136             stu.simage=img;
137             stu.sage=sage;
138         }
139     }
140     sqlite3_finalize(stmt);//回收stmt对象
141     return [stu autorelease];//返回包含学生信息的(Student*)对象
142 }
143 3.向数据库增加一条记录
144 +(void) insertstudent:(NSString*) name age:(int)age image:(NSData*)image
145 {
146     sqlite3 *sqlite=[Db OpenDb];//打开数据库
147     sqlite3_stmt *stmt=nil;//定义sql语句对象
148     int flag=sqlite3_prepare_v2(sqlite, "insert into tblstudent(stuname,stuage,stuimage) values(?,?,?)", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象  多值绑定逗号隔开
149     if (flag==SQLITE_OK)
150     {
151         sqlite3_bind_text(stmt, 1, [name UTF8String],-1,nil);//给问号占位符赋值
152         sqlite3_bind_int(stmt, 2, age);//对整型数据的绑定
153         sqlite3_bind_blob(stmt, 3, [image bytes], [image length], nil);//对二进制类型数据的绑定  数据的字节数(-1 针对字符串的长度比较准)
154         if(sqlite3_step(stmt)==SQLITE_ERROR)//执行insert动作
155         {
156             NSLog(@"insert error");
157         }
158     }
159     sqlite3_finalize(stmt);//回收stmt对象
160 }
161 4.修改更新数据库的数据
162 *注意更新数据库时要通过一定的限制条件来确定要更新的记录,可能是一条也可能是多条,当要更新的记录是多条时要注意所有符合条件的记录都会改为你定义的值。
163 +(void) updatestudent:(Student*) stu
164 {
165     sqlite3 *sqlite=[Db OpenDb];//打开数据库
166     sqlite3_stmt *stmt=nil;//定义sql语句对象
167     int flag=sqlite3_prepare_v2(sqlite, "update tblstudent set stuname=?,stuage=?,stuimage=? where stuid=?", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象
168     if (flag==SQLITE_OK)
169     {
170         sqlite3_bind_text(stmt, 1, [stu.sname UTF8String],-1,nil);//给问号占位符赋值
171         //stu.sname为nsstring    UTF8String    nsstring---->ctring
172         sqlite3_bind_int(stmt, 4, stu.sid);//给问号占位符赋值
173         sqlite3_bind_int(stmt, 2, stu.sage);//给年龄赋值
174         sqlite3_bind_blob(stmt, 3, [stu.simage bytes], [stu.simage length], nil);
175         if(sqlite3_step(stmt)==SQLITE_ERROR)//执行update动作
176         {
177             NSLog(@"update error");
178         }
179         sqlite3_finalize(stmt);//回收stmt对象
180     }
181 }
182 5.删除数据库的记录
183 *注意删除数据库的记录时要通过一定的限制条件来确定要删除的记录,可能是一条也可能是多条,当要删除的记录是多条时要注意所有符合条件的记录都会被删除。
184 +(void) deletebysid:(int) sid
185 {
186     sqlite3 *sqlite=[Db OpenDb];//打开数据库
187     sqlite3_stmt *stmt=nil;//定义sql语句对象
188     int flag=sqlite3_prepare_v2(sqlite, "delete from tblstudent where stuid=?", -1, &stmt, nil);//调用预处理函数将sql语句赋值给stmt对象
189     if (flag==SQLITE_OK)
190     {
191         sqlite3_bind_int(stmt, 1, sid);//给问号占位符赋值  1.语句2.占位符的序号3.给占位符赋得值
192         //执行delete动作
193         if(sqlite3_step(stmt)==SQLITE_ERROR)//未执行成功
194         {
195             NSLog(@"delete error");
196         }
197     }
198     sqlite3_finalize(stmt);//回收stmt对象
199
200     NSLog(@"删除了第%d",sid);
201 }
时间: 2024-10-25 03:34:22

sqlite常用语法 增删 修改 例子的相关文章

sqlite常用语法详细介绍

1.SQL语句的预编译:将语句转为数据流,执行语句前检查语句的语法,但不能知道语句是否能查出结果.此方法有返回值 预编译成功则返回SQLITE_OK----0否则返回SQLITE_ERROR----1int sqlite3_prepare_v2(  sqlite3 *db,                 //指向数据库的指针  const char *zSql,         //SQL语句  int nByte,                   //SQL语句的长度 (一般用-1,系统

SQL常用语法大全

一.基础1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack 4.说明:创建新表create

sqlite常用的命令-增删改查

一.查看版本信息: #sqlite3 -version 二.sqlite3常用命令 1.当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识: 2.输出帮助信息: sqlite>.help 3.查看数据库文件信息命令(注意命令前带字符'.'): sqlite>.database 4.退出sqlite终端命令: sqlite>.quit 或 sqlite>.exit 列出当前显示格式的配置:sqlite>.show 6.显示数

ES6常用语法

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将

SQLite常用点滴总结(转)

expressionexpr ::=     expr binary-op expr |expr [NOT] like-op expr [ESCAPE expr] |unary-op expr |( expr ) |column-name |table-name . column-name |database-name . table-name . column-name |literal-value |parameter |function-name ( expr-list | * ) |ex

sql 常用语法汇总

Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的

iOS开发数据库篇—SQLite常用的函数

iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename,   // 数据库的文件路径 sqlite3 **ppDb          // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*,                                  // 一个打开的数据库实例 const char *sql,                    

SQLServer2005 常用语法大全

SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL-数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建备份数据的 device U

(转)WordPress常用模板函数 修改或自制WordPress主题必备

对于很多WordPress新手来说,不懂任何代码的情况下去瞎改WordPress主题,得出的效果往往会出现语法错误之类的东西或效果不尽人意.想要修改 WordPress主题模板文件最基本的当然要懂得HTML代码,熟悉DIV+CSS布局,PHP代码也得略懂一二. 不过一些比较简单易懂的代码和函数,学习起来并不难,用多改多了你就会记得它,同时这些基本的代码和函数对于一个WordPress 修改主题新手来说尤其重要,当然,我这里说所的是相对有兴趣修改WordPress主题模板的新手,注重网站内容的新手