• IOS 开发学习33 使用sqlite3


    sqlite3 命令行简单使用

    sqlite3 路径 //打开数据库路径连接
    select * from sqlite_master where type=”table”; //显示全部表结构
    select * from testable; //显示某张表数据
    .tables //查看表
    .help //查看帮助
    .quit //退出

    xcode使用sqlite3步骤

    1.加入libsqlite3.dylib

    这里写图片描写叙述

    2.头文件

    //
    //  DbUtils.h
    //  smart
    //
    //  Created by 谢厂节 on 15/5/12.
    //  Copyright (c) 2015年 WHR. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "sqlite3.h"
    
    @interface DbUtils : NSObject
    {
        sqlite3 *db; //声明一个sqlite3数据库
    }
    - (NSString *)filePath;//数据库文件的路径。一般在沙箱的Documents里边操作
    -(void)openDB;
    -(void)closeDB;
    -(NSMutableArray *)getAllTypes;
    @end

    .m文件

    //
    //  DbUtils.m
    //  smart
    //
    //  Created by 谢厂节 on 15/5/12.
    //  Copyright (c) 2015年 WHR. All rights reserved.
    //
    
    #import "DbUtils.h"
    #import "KMTypes.h"
    #import "KMContents.h"
    
    @implementation DbUtils
    
    //打开数据库的方法
    
    - (void)openDB{
           ///文件是否存在
        NSFileManager* fileManager = [NSFileManager defaultManager];
        NSString *dbpath=[self filePath];
        NSLog(@"database path:%@",dbpath);
        BOOL success = [fileManager fileExistsAtPath:dbpath];
        if (!success) {
            NSString *resourcePath=[[NSBundle mainBundle]resourcePath];
            //自己主动复制
            NSString *sourceDBPath=[resourcePath stringByAppendingPathComponent:@"app.bundle/datas.sqlite"];
    
            NSError *error;
            success = [fileManager copyItemAtPath:sourceDBPath toPath:dbpath error:&error];
            if(!success)
                NSAssert1(0,@"数据库附加失败。'%@'.", [error localizedDescription]);
            else
                NSLog(@"数据库附加成功:%@",dbpath);
        }
        if (sqlite3_open([[self filePath] UTF8String], &db) != SQLITE_OK) {
            sqlite3_close(db);
            NSAssert(0, @"数据库打开失败。");
        }
    }
    - (void)closeDB{
        sqlite3_close(db);
    }
    //该方法用于返回数据库在Documents目录中的全路径信息
    - (NSString *)filePath{
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];
        return [documentsDir stringByAppendingPathComponent:@"datas.sqlite"];
    }
    ////查询数据全部类别
    - (NSMutableArray *)getAllTypes{
        [self openDB];
        NSMutableArray *array=[NSMutableArray arrayWithCapacity:6 ];
    
        NSString *sql = @"SELECT * FROM km_types";
        sqlite3_stmt *statement;
    
        if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
            while (sqlite3_step(statement) == SQLITE_ROW) {
                KMTypes* k= [[KMTypes alloc]init];
                int type_id = (int)sqlite3_column_int(statement,0);
                int parent_id = (int)sqlite3_column_int(statement,1);
                char *type_title = (char *)sqlite3_column_text(statement, 2);
                int type_order = (int)sqlite3_column_int(statement,3);
                int topic_count=(int)sqlite3_column_int(statement,4);
    
                NSString *type_titleStr = [[NSString alloc] initWithUTF8String:type_title];
                k.type_title = type_titleStr;
                k.type_id=type_id;
                k.parent_id = parent_id;
                k.type_order = type_order;
                k.topic_count=topic_count;
    
                [array addObject:k];
    
            }
            sqlite3_finalize(statement);
        }
        [self closeDB];
        return array;
    }
    
    @end
    
    这里仅仅实现一个简单的查询功能。
  • 相关阅读:
    【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
    hdu3415 Max Sum of Max-K-sub-sequence 单调队列
    HBase总结(十八)Hbase rowkey设计一
    Makefile生成器,使用C++和Boost实现
    quartz cron表达式在线生成
    NS3网络仿真(6): 总线型网络
    连载:面向对象葵花宝典:思想、技巧与实践(35)
    zoj 2921 Stock(贪心)
    11g RAC 加节点 之 手动加入vip 资源
    [Unity3D]Unity+Android交互教程——让手机&quot;动&quot;起来
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7275912.html
Copyright © 2020-2023  润新知