数据库sqlite的使用
#import <Foundation/Foundation.h>
@class student;
@interface DataBaseHandle : NSObject
//设置单例
+(DataBaseHandle *)shareDB;
//获取沙盒document路径
-(NSString *)documentPath;
//打开数据库
-(void)openDB;
//关闭数据库
-(void)closeDB;
//创建表
-(void)createTable;
//插入信息
-(void)insertStudent:(student *)stu;
//修改信息
-(void)updateMessage;
//删除信息
-(void)deleteMessage;
//查找全部
-(void)selectAllStudent;
//条件查找(按性别查找)
-(void)selectwithSex:(NSString *)sex;
*****************************************************
#import "DataBaseHandle.h"
#import <sqlite3.h>
#import "student.h"
//全局单例对象
static DataBaseHandle *database=nil;
@implementation DataBaseHandle
#pragma mark 实现单例
+(DataBaseHandle *)shareDB
{
if (nil==database) {
database=[[DataBaseHandle alloc] init];
}
return database;
}
//获取document路径
-(NSString *)documentPath
{
return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
}
//使用数据库步骤
//1.在操作数据库之前引入框架
//2.声明一个数据库对象
static sqlite3 *db=nil;
//打开数据库
-(void)openDB
{
if (nil==db) {
//拼接数据库存放路径
NSString *dbPath=[[self documentPath] stringByAppendingString:@"/student.sqlite"];
//根据路径打开数据库
//如果该路径下没有数据库,就自动创建一个
//打开数据库
int result= sqlite3_open(dbPath.UTF8String,&db);
//判断师傅成功
if (result==SQLITE_OK) {
NSLog(@"打开成功");
}
else
{
NSLog(@"打开失败");
}
}
}
#pragma mark 创建表
-(void)createTable
{
//要创建表就要使用SQl语句
///SQL语句在这十一字符串形式存在的
NSString *createString=@"CREATE TABLE IF NOT EXISTS student (sid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , sname TEXT, ssex TEXT, sage TEXT)";
//执行SQL语句
int result=sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);
if (result==SQLITE_OK) {
NSLog(@"创建成功");
}
else
{
NSLog(@"创建失败");
}
}
#pragma mark 插入信息
-(void)insertStudent:(student *)stu
{
//准备插入语句
NSString *insertString=[NSString stringWithFormat:@"INSERT INTO student (sname,ssex,sage) VALUES ('%@','%@','%@')",stu.name,stu.sex,stu.age];
//执行语句
int result=sqlite3_exec(db, insertString.UTF8String, NULL, NULL, NULL);
if (result==SQLITE_OK) {
NSLog(@"插入成功");
}
else
{
NSLog(@"插入失败");
}
}
#pragma mark 修改数据
-(void)updateMessage
{
NSString *updateString=@"UPDATE student SET sid = '1' WHERE sid = 6";
int result=sqlite3_exec(db, updateString.UTF8String, NULL, NULL, NULL);
if (result==SQLITE_OK) {
NSLog(@"修改成功");
}
else
{
NSLog(@"修改失败");
}
}
#pragma mark 删除数据
-(void)deleteMessage
{
NSString *deleteString=@"delete from student where sid=5";
int result=sqlite3_exec(db, deleteString.UTF8String, NULL, NULL, NULL);
if (result==SQLITE_OK) {
NSLog(@"删除成功");
}
else
{
NSLog(@"删除失败");
}
}
#pragma mark 查找
-(void)selectAllStudent
{
//准备查找语句
NSString *selectAll=@"select * from student";
//创建伴随指针
sqlite3_stmt *stmt=nil;
//预备执行
int result=sqlite3_prepare(db, selectAll.UTF8String, -1, &stmt, NULL);
if (result==SQLITE_OK) {
//在没有查找完之前一直循环执行
while (sqlite3_step(stmt)==SQLITE_ROW) {
//取出sid(第0列)
NSInteger sid=sqlite3_column_int(stmt, 0);
//取出sname(第1列)
NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
//取出ssex(第2列)
NSString *ssex=[NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 2)];
//取出sage(第3列)
NSString *sage=[NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt, 3)];
NSLog(@"sid:%d,sname:%@,ssex:%@,sage:%@",sid,sname,ssex,sage);
}
//关闭伴随指针
sqlite3_finalize(stmt);
}
else
{
//结束伴随指针
sqlite3_finalize(stmt);
NSLog(@"查找失败");
}
}
#pragma mark 性别查找
-(void)selectwithSex:(NSString *)sex
{
//准备查找语句
NSString *selectString=@"select * from student where ssex=? ";
//伴随指针
sqlite3_stmt *stmt=nil;
//预执行
int result=sqlite3_prepare(db, selectString.UTF8String, -1, &stmt, nil);
if (result==SQLITE_OK) {
//绑定?的值
//'1'代表第一个?和参数绑定
sqlite3_bind_text(stmt, 1, sex.UTF8String, -1, NULL);
while (sqlite3_step(stmt)==SQLITE_ROW) {
//取出sid(第0列)
NSInteger sid=sqlite3_column_int(stmt, 0);
//取出姓名(第一列)
NSString *sname=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
//取出性别(第二列)
NSString *ssex=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
//取出年龄(第三列)
NSString *sage=[NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)];
NSLog(@"sid:%d,sname:%@,ssex:%@,sage:%@",sid,sname,ssex,sage);
}
//结束伴随指针
sqlite3_finalize(stmt);
}
else
{
//关闭查询指针
sqlite3_finalize(stmt);
NSLog(@"查询失败");
}
}
数据库sqlite的使用的更多相关文章
- Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用
一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...
- python 学习笔记6(数据库 sqlite)
26. SQLite 轻量级的关系型数据库 SQLite是python自带的数据库,可以搭配python存储数据,开发网站等. 标准库中的 sqlite3 提供该数据库的接口. 1. 基本语法如下 c ...
- 数据库SQLite在Qt5+VS2012使用规则总结---中文乱码
VS2012默认格式为 "GB2312-80",而有时我们用到字符串需要显示中文时,就会出现乱码.下面仅就Qt5和VS2012中使用数据库SQLite时,做一个简单的备忘录 #in ...
- Python信息采集器使用轻量级关系型数据库SQLite
1,引言Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.SQLite作为后端数据库,可以搭配Python建网站,或者为python网络爬虫存储数据.SQLite还在其它 ...
- (转)轻量级数据库 SQLite
SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...
- iOS基础 - 数据库-SQLite
一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data(以面向对象的方式操作数据 ...
- 数据库-SQLite
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong 数据库-SQLite 技术博客http:// ...
- [深入浅出iOS库]之数据库 sqlite
一,sqlite 简介 前面写了一篇博文讲如何在 C# 中使用 ADO 访问各种数据库,在移动开发和嵌入式领域也有一个轻量级的开源关系型数据库-sqlite.它的特点是零配置(无需服务器),单磁盘文件 ...
- 数据库sqlite 存储图片
SQLite可以存储 BLOB(binary large object,二进制大对象)格式数据,利用它可以在安卓应用开发中存储图片资源. 这里先讲下,怎样把数据从数据库中取出,并显示在imagView ...
- 数据库SQLite
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...
随机推荐
- py函数递归
1.从前有座山,山中有座庙,庙里有一个老和尚在讲故事... 2.递归:程序调用自身. 3.形式:在函数定义有直接或间接调用自身. 例如:阶乘: n!= 1 x 2 x 3 x ... x n; 从后身 ...
- BZOJ 1064 假面舞会
http://www.lydsy.com/JudgeOnline/problem.php?id=1064 思路:第一眼看的时候以为是差分约束,但是是做不了的,不过能保证的就是这题绝对是图论题...(废 ...
- C 宏定义
C/C++中宏使用总结 .C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令.虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境.本节将介绍如何应用预处理程序和注释 ...
- HttpContext请求上下文对象
一.HttpContext概述 HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的 ...
- 关于set和map的用法
1.set 定义:每个元素最多只出现一次,并且默认的是从小到大排序. set 遍历: 题目http://www.cnblogs.com/ZP-Better/p/4700218.html for(set ...
- 04747_Java语言程序设计(一)_第2章_运算和语句
推荐使用f2 public class Aserver { public static void main(String args[]) { float f1 = (float) 12.345; fl ...
- Unity 生命周期
原文翻译: Execution Order of Event Functions 事件函数的执行顺序 Edit ...
- HDOJ 题目分类
HDOJ 题目分类 /* * 一:简单题 */ 1000: 入门用:1001: 用高斯求和公式要防溢出1004:1012:1013: 对9取余好了1017:1021:1027: ...
- 有一种acm题目叫做,奇葩!
本文全然没有技术含量,纯粹是娱乐. 我事实上想写点东西.可是近期好像做计算几何做得太多了,一种想说说不出东西的感觉,唯有写一下一些奇葩的题目了. HDU3337:Guess the number pi ...
- Cocos2d-x游戏开发CCBAnimationManager控制动画
CocosBuilder能方便的编辑各种动画.大部分动画都是以独立片段的形式存在的. 须要由程序来控制何时播放. 管理ccbi文件的动画播放有个专门的类:CCBAnimationManager 大致的 ...