ios简单数据库运用
一.添加类
二.打开数据库
三.创表
四.插入数据
五.取出数据
一.添加类
1.在设置Linked Frameworks and Libraries 中,点加号并添加libsqlite3.0.dylib.
2.在控制器.m文件中,添加头文件#import<sqlite3.h>
二.打开数据库
sqlite3 *db = NULL;//创建数据库对象实例
int status = sqlite3_open(filename.UTF8String, &db);//打开数据库,返回的是bool类型。记得将OC转为c语言
三.创表
//squlite3_exec(sqlite3 *, const char *sql,int(*callback)(void *,int,char **),void *,char **errmsg);//一般用在没有返回值
const
char
*sql =
"CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real);"
;
char
*errmsg =
NULL
;
sqlite3_exec(
self
.db, sql,
NULL
,
NULL
, &errmsg);
四.插入数据
NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_shop(name, price) VALUES ('%@', %f);", self.nameField.text, self.priceField.text.doubleValue]; sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, NULL); // 刷新表格
五.取出数据
NSString *sql = [NSString stringWithFormat:@"SELECT name,price FROM t_shop WHERE name LIKE '%%%@%%' OR price LIKE '%%%@%%' ;", searchText, searchText];
// stmt是用来取出查询结果的
sqlite3_stmt *stmt = NULL;
// 准备
int status = sqlite3_prepare_v2(self.db, sql.UTF8String, -1, &stmt, NULL);
if (status == SQLITE_OK) { // 准备成功 -- SQL语句正确
while (sqlite3_step(stmt) == SQLITE_ROW) { // 成功取出一条数据
const char *name = (const char *)sqlite3_column_text(stmt, 0);
const char *price = (const char *)sqlite3_column_text(stmt, 1); HMShop *shop = [[HMShop alloc] init];
shop.name = [NSString stringWithUTF8String:name];
shop.price = [NSString stringWithUTF8String:price];
[self.shops addObject:shop];
}
} [self.tableView reloadData];
六.模糊查询
a.增加搜索框
b.设置代理<UISearchBarDelegate>
searchBar.delegeta = self;
c.实现- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
D.数据库语句NSString *sql = [NSString stringWithFormat:@"SELECT name,price FROM t_shop WHERE name LIKE '%%%@%%' OR price LIKE '%%%@%%' ;", searchText, searchText];
代码:
#import "HMViewController.h"
#import <sqlite3.h>
#import "HMShop.h" @interface HMViewController () <UITableViewDataSource, UISearchBarDelegate>
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (weak, nonatomic) IBOutlet UITextField *priceField;
/** 数据库对象实例 */
@property (nonatomic, assign) sqlite3 *db;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
- (IBAction)insert;
@property (nonatomic, strong) NSMutableArray *shops;
@end @implementation HMViewController - (NSMutableArray *)shops
{
if (!_shops) {
self.shops = [[NSMutableArray alloc] init];
}
return _shops;
} - (void)viewDidLoad
{
[super viewDidLoad]; // 增加搜索框
UISearchBar *searchBar = [[UISearchBar alloc] init];
searchBar.frame = CGRectMake(0, 0, 320, 44);
searchBar.delegate = self;
self.tableView.tableHeaderView = searchBar; // 初始化数据库
[self setupDb]; // 查询数据
[self setupData]; // 关闭数据库
// sqlite3_close();
} #pragma mark - UISearchBarDelegate
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[self.shops removeAllObjects]; NSString *sql = [NSString stringWithFormat:@"SELECT name,price FROM t_shop WHERE name LIKE '%%%@%%' OR price LIKE '%%%@%%' ;", searchText, searchText];
// stmt是用来取出查询结果的
sqlite3_stmt *stmt = NULL;
// 准备
int status = sqlite3_prepare_v2(self.db, sql.UTF8String, -1, &stmt, NULL);
if (status == SQLITE_OK) { // 准备成功 -- SQL语句正确
while (sqlite3_step(stmt) == SQLITE_ROW) { // 成功取出一条数据
const char *name = (const char *)sqlite3_column_text(stmt, 0);
const char *price = (const char *)sqlite3_column_text(stmt, 1); HMShop *shop = [[HMShop alloc] init];
shop.name = [NSString stringWithUTF8String:name];
shop.price = [NSString stringWithUTF8String:price];
[self.shops addObject:shop];
}
} [self.tableView reloadData];
} /**
查询数据
*/
- (void)setupData
{
const char *sql = "SELECT name,price FROM t_shop;";
// stmt是用来取出查询结果的
sqlite3_stmt *stmt = NULL;
// 准备
int status = sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL);
if (status == SQLITE_OK) { // 准备成功 -- SQL语句正确
while (sqlite3_step(stmt) == SQLITE_ROW) { // 成功取出一条数据
const char *name = (const char *)sqlite3_column_text(stmt, 0);
const char *price = (const char *)sqlite3_column_text(stmt, 1); HMShop *shop = [[HMShop alloc] init];
shop.name = [NSString stringWithUTF8String:name];
shop.price = [NSString stringWithUTF8String:price];
[self.shops addObject:shop];
}
}
} /**
初始化数据库
*/
- (void)setupDb
{
// 打开数据库(连接数据库)
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shops.sqlite"];
// 如果数据库文件不存在, 系统会自动创建文件自动初始化数据库
int status = sqlite3_open(filename.UTF8String, &_db);
if (status == SQLITE_OK) { // 打开成功
NSLog(@"打开数据库成功"); // 创表
const char *sql = "CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real);";
char *errmsg = NULL;
sqlite3_exec(self.db, sql, NULL, NULL, &errmsg);
if (errmsg) {
NSLog(@"创表失败--%s", errmsg);
}
} else { // 打开失败
NSLog(@"打开数据库失败");
}
} - (IBAction)insert {
NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_shop(name, price) VALUES ('%@', %f);", self.nameField.text, self.priceField.text.doubleValue];
sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, NULL); // 刷新表格
HMShop *shop = [[HMShop alloc] init];
shop.name = self.nameField.text;
shop.price = self.priceField.text;
[self.shops addObject:shop];
[self.tableView reloadData];
} #pragma mark - 数据源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.shops.count;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"shop";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
cell.backgroundColor = [UIColor grayColor];
} HMShop *shop = self.shops[indexPath.row];
cell.textLabel.text = shop.name;
cell.detailTextLabel.text = shop.price; return cell;
}
@end
ios简单数据库运用的更多相关文章
- iOS开发数据库篇—SQLite简单介绍
iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- 【转】 iOS开发数据库篇—SQLite简单介绍
开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中 ...
- iOS开发数据库篇—SQL
iOS开发数据库篇—SQL 一.SQL语句 如果要在程序运行过程中操作数据库中的数据,那得先学会使用SQL语句 1.什么是SQL SQL(structured query language):结构化查 ...
- iOS开发数据库篇—SQL代码应用示例
iOS开发数据库篇—SQL代码应用示例 一.使用代码的方式批量添加(导入)数据到数据库中 1.执行SQL语句在数据库中添加一条信息 插入一条数据的sql语句: 点击run执行语句之后,刷新数据 2.在 ...
- iOS开发数据库篇—SQLite的应用
iOS开发数据库篇—SQLite的应用 一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的) 二 ...
- IOS开发数据库篇—SQLite模糊查询
IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...
- iOS开发数据库篇—SQLite常用的函数
iOS开发数据库篇—SQLite常用的函数 一.简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 * ...
- iOS开发 数据库FMDB
iOS开发 数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...
随机推荐
- window 便笺
windows的便签很方便人们记录日常工作安排,但是不是所有人都知道如何调用,下面介绍下如何调用windows便签: 1.win + R --> StikyNot 2.弹出便签界面 3.右击底 ...
- Android 设置横屏或竖屏
方法一:在AndroidManifest.xml中配置 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上androi ...
- myeclipse和eclipse安装Java反编译插件
为myeclipse和eclipse安装Java反编译插件 插件所需包 1.解压jad1.5.8g.zip.将jad.exe放到jre的bin目录下,下载地址: http://ishare.ia ...
- win8如何删除未知账户(s-1-5-21-2000478354-1390067357-725345543-1003)
今天突然发现从别处复制来的游戏压缩文件不能解压,并且以前把游戏文件都是放在该目录下的,以前局域网玩起游戏来老是不能作为主机,且不能下载局域网玩的RPG地图,以前就注意过这个未知账户(s-1-5-21- ...
- 《RESTful Web Services》第四章 设计URI
引言 URI是跨越Web的资源描述符,一个URI由以下内容组成——协议.主机.端口号.路径
- 信号之system函数
在http://www.cnblogs.com/nufangrensheng/p/3512291.html中已经有了一个system函数的实现,但是该版本并不执行任何信号处理.POSIX.1要求sys ...
- ajax调用webService中的方法
页面代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx. ...
- iOS给背景添加点击事件
当点击背景的时候出发事件,或者跳转界面或者产生其他的响应 -(void)viewDidLoad { UIImageView * imageView = [UIImageView alloc]init ...
- Asp.Net 之 基本控件FileUpload上传控件
1.前台代码: <asp:FileUpload ID="FileUpload" runat="server" /> <asp:Button I ...
- 使用socket实现FTP程序
#-*- coding:utf-8 -*- import socketserver from module import * class server: def __init__(self,reque ...