数据库运用
来源:互联网 发布:步进式节能开水机编程 编辑:程序博客网 时间:2024/05/10 18:11
要想运用数据库,首先得创建一个数据库:(这里用的是 Firefox 的 SQLite Manager 插件)
1.创建数据库:(点击红色框中的按钮),保存路径要选择自己能找到的地方
2.创建表结构:(选中“Tables”,右键 “create table”)
3.为表结构设置名称,并且添加字段(名称、类型、属性)
这样就创建好一个表空间了,接下来是对这个表空间的操作:
1.首先将创建的数据库源文件拖入工程的“Supporting Files”目录下
2.其次创建一个类(这里是:DB.h DB.m)来关联数据库并且可以打开数据库
DB.h
#import <Foundation/Foundation.h>#import <sqlite3.h>@interface DB : NSObject+(sqlite3 *)openDB;@end
DB.m(主要目的:获取数据库文件bundle路径)
#import "DB.h"#import <sqlite3.h>//定义数据库指针(静态,不释放)static sqlite3 *dbPoint = nil;@implementation DB//获得数据库指针(打开数据库)+(sqlite3 *)openDB{ //如果已经获得数据库指针对象,则直接返回即可 if (dbPoint) { return dbPoint; } //否则执行下边代码 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; path = [NSString stringWithFormat:@"%@/db",path]; //判断文件是否存在, 使用文件管理类NSFileManager中的方法 if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { //获得将要拷贝的文件的路径,bundle路径 NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"DataBase" ofType:@"sqlite"]; NSLog(@"sourcePath == %@",sourcePath); NSError *error = nil; //如果不存在,就拷贝进来 [[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:path error:&error]; if (error) {//如果拷贝有错误,显示错误信息 NSLog(@"error == %@", error); } } //创建数据库的指针对象 sqlite3_open([path UTF8String], &dbPoint); return dbPoint; }@end
2.然后创建一个类(这里是:NovelDataBase.h NovelDataBase.m)来对数据库进行操作(增、删、改、查)
(注:根据自己的需求修改SQL语句以及其方法返回值)
//查询数据库+(NSArray *)selectAllNovel{ //创建数组用来保存查到的数据 NSMutableArray *arr = [NSMutableArray array] ; //获得数据库指针 sqlite3 *db = [DB openDB]; //创建数据库的替身 sqlite3_stmt *stmt = nil; //sql查询语句 NSString *sqlStr = [NSString stringWithFormat:@"select nv_id,nv_author,nv_bookname,nv_score from Novel"]; //通过sql语句进行查询,并将查询结果赋值给替身 int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) {//检验sql语句是否正确 while (sqlite3_step(stmt) == SQLITE_ROW) {//如果正确,取出数据 int nid = sqlite3_column_int(stmt, 0);//第二个参数的值和前边sql语句中查询列的顺序所匹配 const unsigned char *nauthor = sqlite3_column_text(stmt, 1); const unsigned char *nbookname = sqlite3_column_text(stmt, 2); float nscore = sqlite3_column_double(stmt, 3); //数据类型转换 NSString *author = [NSString stringWithUTF8String:(const char *)nauthor]; NSString *name = [NSString stringWithUTF8String:(const char *)nbookname]; //创建对象,存数据 NovelModel *aNovel = [NovelModel NovelModelWithId:nid author:author bookname:name score:nscore]; //将对象放入数组中 [arr addObject:aNovel]; } } //将替身放掉 sqlite3_finalize(stmt); return arr;}//插入数据+ (void)insertWithModel:(NovelModel *)model{ sqlite3 *db = [DB openDB]; NSString *sql = [NSString stringWithFormat: @"insert into Novel (nv_id,nv_author,nv_bookname,nv_score) values(%d,'%@','%@',%f)" ,model.nid,model.nAuthor,model.nName,model.nScore]; int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"添加成功"); }}//更新+ (void)updateWithId:(NSInteger)num bookname:(NSString *)name{ sqlite3 *db = [DB openDB]; NSString *sql = [NSString stringWithFormat: @"update Novel set nv_bookname = '%@' where nv_id = %d",name, num]; int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"更新成功"); }}//删除+ (void)deleteWithId:(NSInteger)num{ sqlite3 *db = [DB openDB]; NSString *sql = [NSString stringWithFormat: @"delete from Novel where nv_id = %d", num]; int result = sqlite3_exec(db, [sql UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"删除成功"); }}
0 0
- 数据库运用
- 数据库运用感悟
- 灵活运用数据库主外键
- 如何运用数据库
- SQLite数据库实际运用
- SQLite数据库实际运用
- CYC-数据库的运用
- 数据库高级运用
- 数据库中的ExecuteScalar运用
- SQLite数据库的运用:
- 数据库触发器的运用
- larbin中运用数据库mysql
- symbian 数据库运用小例
- 数据库replace函数的运用
- 数据库SQL运用(1)
- flash运用sendAndLoad()连接数据库
- Android 数据库(SharedPreferences运用)
- sql数据库的基础运用
- linux常用软件安装配置
- sqlite3(笔记)
- UINavigationController 小结
- 如何从C++代码直接访问android framework层的WifiService
- Python SyntaxError: Non-ASCII character Python中文处理问题
- 数据库运用
- 计数排序
- DSP builder 11.1破解总是出问题
- 第四十七题 从1到n整数中1出现的次数
- 快速了解Breeze(二)
- currentstyle和getComputedStyle兼容问题
- 8-1. 求一批整数中出现最多的个位数字(20)
- NYOJ 题目2 括号配对问题
- POJ 2828 Buy Tickets (线段树,单点更新)