iphone数据库(sqlite3)的用法操作oc,xcode
首先你在用之前要在项目中加入libsqlite3.dylib
1、定义模型
[cpp] #import <Foundation/Foundation.h>
#import "sqlite3.h"
@class NotePad;
@class NoteDb;
@interface NoteSqlite : NSObject{
sqlite3 *database;
sqlite3_stmt *statement;
char *errorMsg;
}
//打开数据库
-(BOOL)open;
//创建青
-(BOOL)create;
//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote;
-(BOOL)deleteALLNote;
-(BOOL)deleteaNote:(NotePad*)aNote;
-(BOOL)update:(NotePad*)aNote;
-(NoteDb*)selecteAll;
-(NoteDb*)selectNotes:(NotePad*)aNote;
@end
#import <Foundation/Foundation.h>
#import "sqlite3.h"
@class NotePad;
@class NoteDb;
@interface NoteSqlite : NSObject{
sqlite3 *database;
sqlite3_stmt *statement;
char *errorMsg;
}
//打开数据库
-(BOOL)open;
//创建青
-(BOOL)create;
//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote;
-(BOOL)deleteALLNote;
-(BOOL)deleteaNote:(NotePad*)aNote;
-(BOOL)update:(NotePad*)aNote;
-(NoteDb*)selecteAll;
-(NoteDb*)selectNotes:(NotePad*)aNote;
@end
2、实现方法
[cpp] #import "NoteSqlite.h"
#import "NotePad.h"
#import "NoteDb.h"
@implementation NoteSqlite
-(id)init{
self=[super init];
return self;
}
//打开数据库
-(BOOL)open{
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"noteList.db"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL find = [fileManager fileExistsAtPath:path];
//判断文件是否存在
if (find) {
NSLog(@"数据库文件已经存在");
//打开数据库、返回操作是否正确
if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
NSLog(@"打开成功数据库");
}
return YES;
}else{
if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
//调用createMusicList创建数据库和表
[self create];
return YES;
} else {
sqlite3_close(database);
NSLog(@"Error: open database file.");
return NO;
}
return NO;
}
}
//创建表
-(BOOL)create{
//创建表语句
const char *createSql="create table if not exists note (id integer primary key autoincrement,theme text,information text,ndate text,priority integer)";
//创建表是否成功
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"create ok.");
return YES;
}else{
//打印出错信息
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
return NO;
}
//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote{
//向表中插入记录
//定义一个sql语句
NSString *insertStatementNS = [NSString stringWithFormat:
@"insert into \"note\"\
(theme, information, ndate,priority)\
values (\"%@\", \"%@\", \"%@\",%d)",
aNote.theme,aNote.information,[NSString stringWithFormat:@"%@",aNote.ndate],aNote.priority
];
//将定义的NSString的sql语句,转换成UTF8的c风格的字符串
const char *insertSql = [insertStatementNS UTF8String];
//执行插入语句
if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"insert ok.");
return YES;
}else{
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
return NO;
}
-(BOOL)deleteALLNote{
//删除所有数据,条件为1>0永真
const char *deleteAllSql="delete from note where 1>0";
//执行删除语句
if(sqlite3_exec(database, deleteAllSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"删除所有数据成功");
}
return YES;
}
-(BOOL)deleteaNote:(NotePad*)aNote{
//删除某条数据
NSString *deleteString=[NSString stringWithFormat:@"delete from note where id=%d",aNote.noteId];
//转成utf-8的c的风格
const char *deleteSql=[deleteString UTF8String];
//执行删除语句
if(sqlite3_exec(database, deleteSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"删除成功");
}
return YES;
}
-(BOOL)update:(NotePad*)aNote{
//更新语句
NSString *updateString=[NSString stringWithFormat:@"update note set theme='%@', information='%@',
ndate='%@',priority=%d where id=%d",aNote.theme,aNote.information,aNote.ndate,aNote.priority,aNote.noteId];
// NSLog(@"%@",aNote);
const char *updateSql=[updateString UTF8String];
//执行更新语句
if(sqlite3_exec(database, updateSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"更新成功");
}
return YES;
}
-(NoteDb*)selecteAll{
NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
//查询所有语句
const char *selectAllSql="select * from note";
//执行查询
if (sqlite3_prepare_v2(database, selectAllSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
//如果查询有语句就执行step来添加数据
while (sqlite3_step(statement)==SQLITE_ROW) {
NotePad *note=[[NotePad alloc]init];
int noteid=sqlite3_column_int(statement, 0);
NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
// NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
[formater release];
int proriory=sqlite3_column_int(statement, 4);
note.noteId=noteid;
note.theme=theme;
note.information=information;
note.ndate=ndate;
note.priority=proriory;
[noteDb addNote:note];
[note release];
}
return noteDb;
}
return noteDb;
}
-(NoteDb*)selectNotes:(NotePad*)aNote{
NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
NSString *selectNSSql=[NSString stringWithFormat:@"select * from note where id=%i",aNote.noteId];
//查询所有语句
const char *selectSql=[selectNSSql UTF8String];
//执行查询
if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
//如果查询有语句就执行step来添加数据
while (sqlite3_step(statement)==SQLITE_ROW) {
NotePad *note=[[NotePad alloc]init];
int noteid=sqlite3_column_int(statement, 0);
NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
// NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
[formater release];
int proriory=sqlite3_column_int(statement, 4);
note.noteId=noteid;
note.theme=theme;
note.information=information;
note.ndate=ndate;
note.priority=proriory;
[noteDb addNote:note];
[note release];
}
return noteDb;
}
return noteDb;
}
@end
#import "NoteSqlite.h"
#import "NotePad.h"
#import "NoteDb.h"
@implementation NoteSqlite
-(id)init{
self=[super init];
return self;
}
//打开数据库
-(BOOL)open{
NSArray *paths= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"noteList.db"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL find = [fileManager fileExistsAtPath:path];
//判断文件是否存在 www.2cto.com
if (find) {
NSLog(@"数据库文件已经存在");
//打开数据库、返回操作是否正确
if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
NSLog(@"打开成功数据库");
}
return YES;
}else{
if(sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
//调用createMusicList创建数据库和表
[self create];
return YES;
} else {
sqlite3_close(database);
NSLog(@"Error: open database file.");
return NO;
}
return NO;
}
}
//创建表
-(BOOL)create{
//创建表语句
const char *createSql="create table if not exists note (id integer primary key autoincrement,theme text,information text,ndate text,priority integer)";
//创建表是否成功
if (sqlite3_exec(database, createSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"create ok.");
return YES;
}else{
//打印出错信息
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
return NO;
}
//增加、删除、修改、查询
-(BOOL)insert:(NotePad*)aNote{
//向表中插入记录
//定义一个sql语句
NSString *insertStatementNS = [NSString stringWithFormat:
@"insert into \"note\"\
(theme, information, ndate,priority)\
values (\"%@\", \"%@\", \"%@\",%d)",
aNote.theme,aNote.information,[NSString stringWithFormat:@"%@",aNote.ndate],aNote.priority
];
//将定义的NSString的sql语句,转换成UTF8的c风格的字符串
const char *insertSql = [insertStatementNS UTF8String];
//执行插入语句
if (sqlite3_exec(database, insertSql, NULL, NULL, &errorMsg)==SQLITE_OK) {
NSLog(@"insert ok.");
return YES;
}else{
NSLog(@"error: %s",errorMsg);
sqlite3_free(errorMsg);
}
return NO;
}
-(BOOL)deleteALLNote{
//删除所有数据,条件为1>0永真
const char *deleteAllSql="delete from note where 1>0";
//执行删除语句
if(sqlite3_exec(database, deleteAllSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"删除所有数据成功");
}
return YES;
}
-(BOOL)deleteaNote:(NotePad*)aNote{
//删除某条数据
NSString *deleteString=[NSString stringWithFormat:@"delete from note where id=%d",aNote.noteId];
//转成utf-8的c的风格
const char *deleteSql=[deleteString UTF8String];
//执行删除语句
if(sqlite3_exec(database, deleteSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"删除成功");
}
return YES;
}
-(BOOL)update:(NotePad*)aNote{
//更新语句
NSString *updateString=[NSString stringWithFormat:@"update note set theme='%@', information='%@',
ndate='%@',priority=%d where id=%d",aNote.theme,aNote.information,aNote.ndate,aNote.priority,aNote.noteId];
// NSLog(@"%@",aNote);
const char *updateSql=[updateString UTF8String];
//执行更新语句
if(sqlite3_exec(database, updateSql, NULL, NULL, &errorMsg)==SQLITE_OK){
NSLog(@"更新成功");
}
return YES;
}
-(NoteDb*)selecteAll{
NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
//查询所有语句
const char *selectAllSql="select * from note";
//执行查询
if (sqlite3_prepare_v2(database, selectAllSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
//如果查询有语句就执行step来添加数据
while (sqlite3_step(statement)==SQLITE_ROW) {
NotePad *note=[[NotePad alloc]init];
int noteid=sqlite3_column_int(statement, 0);
NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
// NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
[formater release];
int proriory=sqlite3_column_int(statement, 4);
note.noteId=noteid;
note.theme=theme;
note.information=information;
note.ndate=ndate;
note.priority=proriory;
[noteDb addNote:note];
[note release];
}
return noteDb;
}
return noteDb;
}
-(NoteDb*)selectNotes:(NotePad*)aNote{
NoteDb *noteDb=[[[NoteDb alloc]init]autorelease];
NSString *selectNSSql=[NSString stringWithFormat:@"select * from note where id=%i",aNote.noteId];
//查询所有语句
const char *selectSql=[selectNSSql UTF8String];
//执行查询
if (sqlite3_prepare_v2(database, selectSql, -1, &statement, nil)==SQLITE_OK) {
NSLog(@"select ok.");
//如果查询有语句就执行step来添加数据
while (sqlite3_step(statement)==SQLITE_ROW) {
NotePad *note=[[NotePad alloc]init];
int noteid=sqlite3_column_int(statement, 0);
NSMutableString *theme=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
NSMutableString *information=[NSMutableString stringWithCString:(char*)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
NSString *ndateString=[NSString stringWithCString:(char*)sqlite3_column_text(statement, 3) encoding:NSUTF8StringEncoding];
NSDateFormatter* formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *ndate=[formater dateFromString:[ndateString substringToIndex:[ndateString length]-5]];
// NSLog(@"%@",[ndateString substringToIndex:[ndateString length]-5]);
[formater release];
int proriory=sqlite3_column_int(statement, 4);
note.noteId=noteid;
note.theme=theme;
note.information=information;
note.ndate=ndate;
note.priority=proriory;
[noteDb addNote:note];
[note release];
}
return noteDb;
}
return noteDb;
}
@end
iphone数据库(sqlite3)的用法操作oc,xcode的更多相关文章
- [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库
推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...
- iphone/iOS 访问本地数据库sqlite3
Phone也支持访问本地数据库Sqlite 3.这里简单的介绍一下iPhone上Sqlite 3的使用方法. 首先需要在项目中引用Sqlite 3的开发包,下面是在iPhone SDK 3.0下的目录 ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- 数据库(SQLITE3函数总结): sqlite3_open, sqlite3_exec, slite3_close,sqlite3_prepare_v2,sqlite3_column_text,
Sqlite3 的确非常好用.小巧.速度快.近期研究它,有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记. 导入SQLLite library并引入头文件. libsqlite3.dyl ...
- 我的Android进阶之旅------>温习Sqlite3的常用操作
前言;今天要写一个应用来调节系统的Brightness值,来改变系统的背光亮度.由于刚开始些的时候没有考虑Brightness的最小值,直接托动SeekBar到最小值(为0).瞬间,屏幕变成全黑,失败 ...
- Android中如何使用命令行查看内嵌数据库SQLite3
转载博客:http://www.linuxidc.com/Linux/2011-06/37135.htm 在上图中,除了最后一个红色的方框,其它方框都是adb shell下的命令. [1]在Andro ...
- SQL用法操作合集
SQL用法操作合集 一.表的创建 1.创建表 格式: 1 CREATE TABLE 表名 2 (列名 数据类型(宽度)[DEFAULT 表达式][COLUMN CONSTRAINT], 3 ... ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
随机推荐
- 安装drupal对服务器环境的要求
Drupal 8 Apache 2.x PHP 5.5.9 及以上版本 MySQL 5.5.3 及以上版本 Drupal 7 Apache 2.x PHP 5.2.5 及以上版本(推荐 PHP 5.4 ...
- H5网站加载速度优化总结
1. 在代码文件结构 尽量优化的同时,能力再强已经到极限了,但你服务器辣鸡,搭配不当,你代码优化上天 也是徒劳啊. 2.你不怎么优化, 服务器 各种技术配置到位的话, now你也看到了,我一个系统首页 ...
- CF1025C Plasticine zebra
思路: 不要被骗了,这个操作实际上tm是在循环移位. 实现: #include <bits/stdc++.h> using namespace std; int main() { stri ...
- 从零开始利用vue-cli搭建简单音乐网站(七)
这几天完成了歌曲收藏功能,先看最后效果: 新注册用户:“newuser”,进入“我的音乐界面如下所示” 点击新建歌单,输入:“新歌单”,确认,如下: 目前还没有歌曲,打开音乐界面,点击收藏功能,如下, ...
- iOS 通知、本地通知和推送通知有什么区别? APNS机制。
本地/推送通知为不同的需要而设计.本地通知对于iPhone,iPad或iPod来说是本地的.而推送通知——来自于设备外部.它们来自远程服务器——也叫做远程通知——推送给设备上的应用程序(使用APNs) ...
- codevs 3129 奶牛代理商IX
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 小X从美国回来后,成为了USACO中国区的奶牛销售代理商,专门出售质优价廉的“ ...
- Python相关机器学习
Python机器学习库 Python的机器学习库汇总与梳理 机器学习之开源库大总结
- codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)
阅读题, 概要:给出垃圾邮件和非垃圾邮件的集合,然后按照题目给出的贝叶斯公式计算概率一封邮件是垃圾邮件的概率. 逐个单词判断,将公式化简一下就是在垃圾邮件中出现的次数和在总次数的比值,大于二分之一就算 ...
- JS原型、原型链、构造函数、实例与继承
https://cloud.tencent.com/developer/article/1408283 https://cloud.tencent.com/developer/article/1195 ...
- nodejs:遍历文件夹文件统计文件大小
根据 http://blog.csdn.net/hero82748274/article/details/45700465这里的思路对读写文件做了一个 封装: webpack在打包的时候可以借助ass ...