zoukankan      html  css  js  c++  java
  • ios sqlite数据库操作

      1 @interface MyViewController () {
      2     // 数据库实例,代表着整个数据库
      3     sqlite3 *_db;
      4 }
      5 @end
      6 
      7 @implementation MyViewController
      8 
      9 - (void)viewDidLoad
     10 {
     11     [super viewDidLoad];
     12     
     13     [self openDB];
     14     
     15     [self createTables];
     16     
     17     for (int i = 0; i<10; i++) {
     18         //[self insertData];
     19     }
     20     
     21     
     22     [self findData];
     23     
     24     // 关闭数据库
     25     sqlite3_close(_db);
     26 }
     27 
     28 #pragma mark 查询数据
     29 - (void)findData {
     30     char *sql = "select id,name,age from t_person;";
     31     
     32     sqlite3_stmt *stmt;
     33     
     34     // sqlite3_prepare_v2做一些插入数据的准备
     35     // 主要是检查SQL语句的语法问题
     36     int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
     37     // 说明语句没有语法问题
     38     if (result == SQLITE_OK) {
     39         
     40         // 如果返回值是ROW,代表读取到一行数据
     41         while (sqlite3_step(stmt) == SQLITE_ROW) {
     42             // 列号从0开始
     43             int ID = sqlite3_column_int(stmt, 0);
     44             
     45             char *name = (char *)sqlite3_column_text(stmt, 1);
     46             
     47             int age = sqlite3_column_int(stmt, 2);
     48             
     49             NSLog(@"id=%i,name=%s,age=%i", ID, name, age);
     50         }
     51         
     52     } else {
     53         NSLog(@"查询数据的SQL语句语法有问题");
     54     }
     55 }
     56 
     57 #pragma mark 插入数据
     58 - (void)insertData {
     59     char *sql = "insert into t_person(name, age) values(?, ?);";
     60     
     61     sqlite3_stmt *stmt;
     62 
     63     // sqlite3_prepare_v2做一些插入数据的准备
     64     // 主要是检查SQL语句的语法问题
     65     int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);
     66     
     67     // 说明语句没有语法问题
     68     if (result == SQLITE_OK) {
     69         // 第2个int类型的参数用来指定第几列,从1开始
     70         // 绑定name字段的值
     71         sqlite3_bind_text(stmt, 1, "mj", -1, NULL);
     72         
     73         // 绑定age字段的值
     74         sqlite3_bind_int(stmt, 2, 10);
     75         
     76         // 执行sql语句
     77         if (sqlite3_step(stmt) != SQLITE_DONE) {
     78             NSLog(@"插入数据失败!");
     79         } else {
     80             NSLog(@"插入数据成功!");
     81         }
     82     } else {
     83         NSLog(@"插入数据的SQL语句语法有问题");
     84     }
     85 }
     86 
     87 #pragma mark 打开数据库
     88 - (void)openDB {
     89     // 数据库文件路径
     90     NSString *filename = [@"sqlite.db" documentsAppend];
     91     
     92     // 如果数据库不存在,就会创建一个
     93     int result = sqlite3_open([filename UTF8String], &_db);
     94     if (result == SQLITE_OK) {
     95         NSLog(@"打开数据库成功!");
     96     }
     97 }
     98 
     99 #pragma mark 创建表
    100 - (void)createTables {
    101     char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
    102     
    103     char *error;
    104     // sqlite3_exec能执行一切SQL语句
    105     // insert into t_person(name, age) values('mj', 10);
    106     int result = sqlite3_exec(_db, sql, NULL, NULL, &error);
    107     
    108     if (result != SQLITE_OK) {
    109         NSLog(@"创表错误:%s", error);
    110     }
    111 }
    112 @end
     
  • 相关阅读:
    机器学习中的规则化
    TF-IDF 文本相似度分析
    数据分析实践:遇到的问题及感想
    记录工作中用到的linux命令
    回归:预测数值型数据
    FP
    Application
    Mac安装sqlite3
    查看百度CUID方法
    leetcode算法题整理
  • 原文地址:https://www.cnblogs.com/wangshengl9263/p/3266071.html
Copyright © 2011-2022 走看看