#import <sqlite3.h>

@interface ViewController ()
{
sqlite3 *_sqldb;
} @end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self OpenDb];
[self createTable];
[self insertData];
[self FindData];
} //打开数据库 -(void)OpenDb{ NSArray *arrs= NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//创建数据库,如果数据库存在就直接打开,不存在就创建打开
NSString *path=[arrs lastObject] ;
NSString *documentpath= [path stringByAppendingPathComponent:@"sql.db"];
int reslut= sqlite3_open([documentpath UTF8String], &_sqldb);
if(reslut==SQLITE_OK){
NSLog(@"数据库已被打开");
} }
//通过数据库实例创建表
-(void)createTable{
//不带参数的sql语句
const char* sql="create table if not exists t_person (id integer primary key autoincrement,name text,age integer);";
char *error;
//sqlite3_exec可以执行一切不带参数的SQL语句。如果是带参数最好不用,防止SQL注入漏洞攻击
int resutl= sqlite3_exec(_sqldb, sql, NULL, NULL, &error);
if(resutl==SQLITE_OK){
NSLog(@"创建表成功");
}
else{
NSLog(@"创建表失败--》%s",error);
}
} //插入数据
-(void)insertData{
//带参数的SQL语句 "?"是带参数的占位符
const char * sql="insert into t_person(name,age) values(?,?);";
sqlite3_stmt *stmp;
//在执行SQL语句之前检查SQL语句语法,-1代表字符串的长度
int result= sqlite3_prepare_v2(_sqldb, sql, -, &stmp, NULL);
if(result==SQLITE_OK){
NSLog(@"插入SQL语句语法没有问题");
//绑定参数,插入的参数的下标是从1开始
sqlite3_bind_text(stmp, , "gcb", -, NULL);
sqlite3_bind_int(stmp, , ); //执行参参数的SQL语句,不能有exec
int result=sqlite3_step(stmp);
//插入进行判断,要用sqLite_Done来判断
if(result==SQLITE_DONE){
NSLog(@"插入成功");
}
else{
NSLog(@"插入失败") ;
} }
else{
NSLog(@"插入SQL语句有问题");
}
} -(void)FindData{
char *sql="select id,name,age from t_person";
//查询做好用step执行
sqlite3_stmt *stmt;
//检查SQL语句的语法问题
int result= sqlite3_prepare_v2(_sqldb, sql, -, &stmt, NULL);
if(result==SQLITE_OK){
while (sqlite3_step(stmt)==SQLITE_ROW) {
//查询的列是0开始 插入的列从1开始
// int xh=sqlite3_column_int(stmt, 0);
int xh=sqlite3_column_int(stmt, );
char * name=(char *)sqlite3_column_text(stmt, );
int age=sqlite3_column_int(stmt, );
NSLog(@"xh=%i-->name=%s-->age=%i",xh,name,age); }
}
else{
NSLog(@"查询SQL语法有误");
} }

ios 中sqlite的用法的更多相关文章

  1. iOS中block的用法 以及和函数用法的区别

    ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的 ...

  2. iOS 中SQLite数据库操作

    在iOS中实现SQLite数据库的操作:1.导入框架(libsqlite3.0.tbd) 2.导入头文件<sqlite3.h> 3.实现数据的增删改查 实现简单 SQLite数据库操作 的 ...

  3. iOS中SQLite知识点总结1

    数据库(SQLite) 01-数据库简介 1.什么是数据库 数据库(Database)是按照数据结构来组织,存储和管理数据的仓库 2.数据库的分类 关系型数据库(主流) PC端:Oracle/MySQ ...

  4. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  5. iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

    1. 前言 Block:带有自动变量(局部变量)的匿名函数.它是C语言的扩充功能.之所以是拓展,是因为C语言不允许存在这样匿名函数. 1.1 匿名函数 匿名函数是指不带函数名称函数.C语言中,函数是怎 ...

  6. ios中Pldatabase的用法

    将PLDATABASE加入到工程 下载PLDatabase 的dmg文件 将PLDatabase的framework复制到工程根目录在工程中加入该framework使用该framework进行数据库操 ...

  7. ios中图片拉伸用法

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...

  8. iOS中的CocoaPods用法及常用命令

     CocoaPods是什么? ***CocoaPods的使用场景:*** 1. 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用 ...

  9. iOS中NSScanner 的用法

    NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以创建NSScanner时制定他的String属性,然后scanner会按照你的要求从头到尾扫描这 ...

随机推荐

  1. [PowerShell Utils] Automatically Change DNS and then Join Domain

    I would like to start a series of blog posts sharing PowerShell scripts to speed up our solution ope ...

  2. webservice发布问题,部署iis后调用不成功

    我使用的环境win8.vs2010.IIS8.0 vs2010中创建的webservice中的方法可以正常调用,但是发布到IIS上后,asmx文件能正常访问, 但是进入方法后, 点击 "调用 ...

  3. 基于双向LSTM和迁移学习的seq2seq核心实体识别

    http://spaces.ac.cn/archives/3942/ 暑假期间做了一下百度和西安交大联合举办的核心实体识别竞赛,最终的结果还不错,遂记录一下.模型的效果不是最好的,但是胜在“端到端”, ...

  4. 如何将.NET 4.0写的Windows service和Web API部署到docker上面

    Web API. 看这篇文章: https://docs.microsoft.com/en-us/aspnet/mvc/overview/deployment/docker-aspnetmvc Win ...

  5. 全国第二届Revit开发实战训练营在北京圆满落幕

    由北京橄榄山软件公司与筑城网校中国BIM培训网共同举办的"全国第二届Revit开发实战训练营于1月1日在筑城网校培训教室如期开班. 參加此次培训的有上海同济大学建筑设计研究院(集团)有限公司 ...

  6. android自己定义进度值可拖动的seekbar

    近期忙找实习,加上实验室在推新项目,须要学习新知识.所以非常长一段时间没去整理了官博客了,github也蛮久没更新.非常羞愧.接下来还是要坚持写. 今天就简单的写一下我在项目中用到的算自己定义seek ...

  7. linux下更改主机名方法hostname

    一.永久修改修改/etc/sysconfig/network,在里面指定主机名称HOSTNAME=然后执行命令hostname 主机名这个时候可以注销一下系统,再重登录之后就行了. 或者修改/etc/ ...

  8. ScrollView嵌套ListView只显示一行解决方案

    在ScrollView里边嵌套了个ListView,后边就发现数据源里好多数据,但ListView只是显示1行. 各种debug,打log,数据什么的都没问题,上网百度了下,发现原来是ScrollVi ...

  9. SuperMap打包部署要点

    折腾了一段时间,终于要发布一个版本了,但SuperMap程序怎么发布呢,需要些什么必要条件呢?本来想问问超图的技术人员的,但都没人理我,估计都去开大会去了. 下面是自己测试出来的结果,主要是根据Sup ...

  10. MyBatis - (一) 基本数据操作命令和简单映射

    1. 简单的select映射 <mapper namespace="com.mybatis3.mappers.StudentMapper"> <select id ...