自己写了几个方法来实现数据的增删改查功能:

首先在TARGETS---》》Build phases里面添加数据库所关联的库文件libsqlite3.tbd

添加完以后,在控制器上添加

#import <sqlite3.h> 且增加属性

{

sqlite3 *db;

}

在.m文件中实现增删改查的方法即可

#import "ViewController.h"

#define DBNAME    @"personinfo.sqlite"

#define NAME      @"name"

#define AGE       @"age"

#define ADDRESS   @"address"

#define TABLENAME @"PERSONINFO"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

[self OpenDataBase];

[self createTable];

[self InsertData];

[self SelectData];

[self deleteData];

[self updateData];

}

#pragma mark-----------打开数据库

-(void)OpenDataBase

{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documents = [paths objectAtIndex:0];

NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];

if (sqlite3_open([database_path UTF8String], &db) != SQLITE_OK) {

sqlite3_close(db);

NSLog(@"数据库打开失败");

}

}

#pragma mark----------创建数据表PERSONINFO的语句

-(void)createTable

{

NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";

[self execSql:sqlCreateTable];

}

#pragma mark------------创建一个独立的执行sql语句的方法

-(void)execSql:(NSString *)sql

{

char *err;

if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {

sqlite3_close(db);

NSLog(@"数据库操作数据失败!");

}

}

#pragma mark------------增加数据

-(void)InsertData

{

NSString *sql1 = [NSString stringWithFormat:

@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",

TABLENAME, NAME, AGE, ADDRESS, @"张三", @"18",@"北京"];

NSString *sql2 = [NSString stringWithFormat:

@"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",

TABLENAME, NAME, AGE, ADDRESS, @"老四", @"19",@"深圳"];

[self execSql:sql1];

[self execSql:sql2];

}

#pragma mark----------------删除数据

-(void)deleteData

{

sqlite3_stmt *statement;

NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM PERSONINFO WHERE age = %d", 19];

//        NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM PERSONINFO"];

int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement, NULL);

if (result == SQLITE_OK) {

if (sqlite3_step(statement) == SQLITE_ROW) {//觉的应加一个判断, 若有这一行则删除

if (sqlite3_step(statement) == SQLITE_DONE) {

sqlite3_finalize(statement);

sqlite3_close(db);

}

}

}

sqlite3_finalize(statement);

sqlite3_close(db);

NSLog(@"-------删除后---------");

[self SelectData];

}

#pragma mark----------修改数据

-(void)updateData

{

sqlite3_stmt *statement;

NSString *sqlStr = [NSString stringWithFormat:@"update PERSONINFO set name = '%@' where age = %d", @"王五", 18];

int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement, NULL);

if (result == SQLITE_OK) {

if (sqlite3_step(statement) == SQLITE_ROW) {//觉的应加一个判断, 若有这一行则修改

if (sqlite3_step(statement) == SQLITE_DONE) {

sqlite3_finalize(statement);

sqlite3_close(db);

}

}

}

sqlite3_finalize(statement);

sqlite3_close(db);

NSLog(@"------修改后----------");

[self SelectData];

}

#pragma mark-----------------查询数据

-(void)SelectData

{

NSString *sqlQuery = @"SELECT * FROM PERSONINFO";

sqlite3_stmt * statement;

if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement,nil) == SQLITE_OK) {

while (sqlite3_step(statement) == SQLITE_ROW) {

char *name = (char*)sqlite3_column_text(statement, 1);

NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];

int age = sqlite3_column_int(statement, 2);

char *address = (char*)sqlite3_column_text(statement, 3);

NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];

NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);

}

}

sqlite3_close(db);

}

 
输出结果:

2016-12-10 08:55:54.130 SQLDemo[7313:144445] name:张三  age:18  address:北京

2016-12-10 08:55:54.130 SQLDemo[7313:144445] name:老四  age:19  address:深圳

2016-12-10 08:55:54.131 SQLDemo[7313:144445] -------删除后---------

2016-12-10 08:55:54.132 SQLDemo[7313:144445] name:张三  age:18  address:北京

2016-12-10 08:55:54.133 SQLDemo[7313:144445] ------修改后----------

2016-12-10 08:55:54.133 SQLDemo[7313:144445] name:王五  age:18  address:北京

iOS 数据库的增删改查(OC版)的更多相关文章

  1. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  2. iOS CoreData (一) 增删改查

    代码地址如下:http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映 ...

  3. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  4. ThinkPHP实现对数据库的增删改查

    好久都没有更新博客了,之前老师布置的任务总算是现在可以说告一段落了,今天趁老师还没提出其他要求来更新一篇博客. 今天我想记录的是我之前做项目,自己所理解的ThinkPHP对数据库的增删改查. 首先要说 ...

  5. Android学习---数据库的增删改查(sqlite CRUD)

    上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) package com. ...

  6. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  7. Android SQL语句实现数据库的增删改查

    本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...

  8. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  9. 【转载】通过JDBC对MySQL数据库的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

随机推荐

  1. LeetCode刷刷记录

    一遍考研,一遍还是要刷刷题.感觉自己的时间安排的不是很好,还是要抓紧自己的日常时间,当然,也要练练刷题的手感. 1.第一题就两重循环找到索引就OK,因为是无序的,所以就不能用二分来查找,题目中每个数的 ...

  2. CS0103: The name ‘Scripts’ does not exist in the current context解决方法

    转至:http://blchen.com/cs0103-the-name-scripts-does-not-exist-in-the-current-context-solution/ 更新:这个bu ...

  3. 线程的Alertable与User APC

    在使用插User APC注入DLL时,经常面临一个问题,那就是线程必须是处于Alertable模式才能注入成功.但一直对这个Alertable的含义不甚清楚,今天总算是把这个梗消化了. 微软对Aler ...

  4. bootstrap内置网格式布局系统:

    bootstrap分为12栏,若想要一个元素占用一定的栏数的宽度,可以在这个元素上用一个特定的类,就比如说span1.span2....类. 定义的布局: 定义page-header类,在这个类当中为 ...

  5. ZeroMQ(ZMQ)函数接口英汉直译

    找了好多地方都找不到ZMQ接口函数的中文文档,就厚着脸皮自己翻译了下.但因为作者本人涉世未深,翻译有错误的地方还请大家不吝赐教,在下感激不尽. 因为时间有限,只能一点一点翻译了. ZMQ接口文档的官方 ...

  6. const 使用一二

    Primer C++ 练习题4.20: int i = -1; const int ic = i; 对于这个,一开始认为,ic 作为const 类型变量,定义时应该给其赋常值,而此处给的是变量i,因此 ...

  7. [LintCode] Intersection of Two Linked Lists 求两个链表的交点

    Write a program to find the node at which the intersection of two singly linked lists begins. Notice ...

  8. Android屏幕适配笔记

    1.限定符 为了适配不同屏幕大小的android手机或android平板,有时候就需要利用限定符来为不同的屏幕设定不同的布局文件,在一般情况下我们都是在layout文件夹下为某个活动准备一个默认的布局 ...

  9. python方法中的self

    前几天在写一个c作业时,突发奇想,在结构体中加入函数指针, 像这样: struct People { int _age; int (*age)(); }people; 这样调用时就可以 people. ...

  10. 用微信小程序开发的Canvas绘制可配置的转盘抽奖

    使用https://github.com/givebest/GB-canvas-turntable代码移植过而来. 其它 微信小程序感觉是个半成品,代码移植过程比较繁琐麻烦.canvas API 部分 ...