zoukankan      html  css  js  c++  java
  • IOS sqlite数据库增删改查

    1.简介

    简单封装sqlite数据库操作类 BaseDB 用于完成对sqlite的增删改查,使用前先导入libsqlite3.0.dylib库

    2.BaseDB.h

    //
    //  BaseDB.h
    //  SqliteDemo
    //
    //  Created by 赵超 on 14-8-26.
    //  Copyright (c) 2014年 赵超. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "sqlite3.h"
    
    @interface BaseDB : NSObject
    
    /**
     *  创建一个表
     *  sql:执行的SQL语句
     *  dataName:数据库名称
     */
    
    -(void) createTable:(NSString*)sql dataBaseName:(NSString*) dataName;
    /**
     *  执行SQL语句,主要完成增加、修改、删除
     *  sql:执行的SQL语句
     *  params:SQL语句中的参数
     *  dataName:数据库名称
     */
    -(BOOL) execSql:(NSString*)sql parmas:(NSArray*) params dataBaseName:(NSString*)dataName;
    /**
     *  选择数据
     *  sql:查询的SQL语句
     *  params:查询SQL语句中的参数
     *  dataName:查询数据库名称
     */
    
    -(NSMutableArray*) selectSql:(NSString*)sql parmas:(NSArray*) params dataBaseName:(NSString*)dataName;
    
    
    
    @end
    
    创建的数据库文件位于 /Users/zhaochao/Library/Application Support/iPhone Simulator/7.1/Applications/07D17328-B63C-4D87-9B6C-03AA5CD681EA/Documents/zhaochao.sqlite,
    就是 NSString *fileName=[NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",name]; 这个目录。文件可以直接用SQLiteManager软件打开,也可以在firefox浏览器中安装sqlitemanager插件打开,如下图

    3.BaseDB.m

    //
    //  BaseDB.m
    //  SqliteDemo
    //
    //  Created by 赵超 on 14-8-26.
    //  Copyright (c) 2014年 赵超. All rights reserved.
    //
    
    #import "BaseDB.h"
    @implementation BaseDB
    
    /*
     *  获取沙盒目录
     *  name:追加的目录aa
     *
     */
    -(NSString*) DataBaseName:(NSString *) name {
         NSString *fileName=[NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",name];
        return fileName;
    }
    /**
     *  选择数据
     *  sql:查询的SQL语句
     *  params:查询SQL语句中的参数
     *  dataName:查询数据库名称
     */
     
    -(NSMutableArray*) selectSql:(NSString *)sql parmas:(NSArray *)params dataBaseName:(NSString *)dataName{
        
        sqlite3 *sqlite=nil;
        sqlite3_stmt *stmt=nil;
        //打开数据库
        NSString *fileName=[self DataBaseName:dataName];
        int result= sqlite3_open([fileName UTF8String], &sqlite);
        if (result!=SQLITE_OK) {
            NSLog(@"打开失败");
            return nil;
        }
        const char* sqlCh=[sql UTF8String];
        //编译SQL语句
        sqlite3_prepare_v2(sqlite, sqlCh, -1, &stmt, NULL);
        //绑定参数
        for (int i=0; i<params.count; i++) {
            NSString *param=[params objectAtIndex:i];
            sqlite3_bind_text(stmt, i+1, [param UTF8String], -1, NULL);
        }
    
        //执行查询语句
        result=sqlite3_step(stmt);
        
        NSMutableArray *resultData=[NSMutableArray array];
        //遍历结果
        while (result==SQLITE_ROW) {
            NSMutableDictionary *resultRow=[NSMutableDictionary dictionary];
            //获取字段个数
            int col_count = sqlite3_column_count(stmt);
            for (int i=0; i<col_count; i++) {
                 //获取字段名称
                const char*columName=sqlite3_column_name(stmt,i);
                //获取字段值
                char* columValue=(char*) sqlite3_column_text(stmt, i);
                NSString  *columkeyStr=[NSString stringWithCString:columName encoding:NSUTF8StringEncoding];
                NSString *columValueStr=[NSString stringWithCString:columValue encoding:NSUTF8StringEncoding];
                [resultRow setObject:columValueStr forKey:columkeyStr];
            }
            [resultData addObject:resultRow];
            result=sqlite3_step(stmt);
        }
        //关闭数据库句柄
        sqlite3_finalize(stmt);
        //关闭数据库
        sqlite3_close(sqlite);
        NSLog(@"查询完!");
        return  resultData;
    }
    /**
     *  执行SQL语句,主要完成增加、修改、删除
     *  sql:执行的SQL语句
     *  params:SQL语句中的参数
     *  dataName:数据库名称
     */
    
    -(BOOL) execSql:(NSString *)sql parmas:(NSArray *)params dataBaseName:(NSString *)dataName{
        sqlite3 *sqlite=nil;
        sqlite3_stmt *stmt=nil;
        //打开数据库
        NSString *fileName=[self DataBaseName:dataName];
        int result= sqlite3_open([fileName UTF8String], &sqlite);
        if (result!=SQLITE_OK) {
            NSLog(@"打开失败");
            return NO;
        }
        const char* sqlCh=[sql UTF8String];
        //编译SQL语句
        sqlite3_prepare_v2(sqlite, sqlCh, -1, &stmt, NULL);
        //绑定参数
        for (int i=0; i<params.count; i++) {
            NSString *parm=[params objectAtIndex:i];
            sqlite3_bind_text(stmt, i+1, [parm UTF8String], -1, NULL);
        }
        //执行SQL
        result=sqlite3_step(stmt);
        if (result==SQLITE_ERROR || result==SQLITE_MISUSE) {
            NSLog(@"执行SQL语句失败");
            sqlite3_close(sqlite);
            return  NO;
        }
        //关闭数据库句柄
        sqlite3_finalize(stmt);
        //关闭数据库
        sqlite3_close(sqlite);
        NSLog(@"执行成功!");
        return YES;
    }
    
    /**
     *  创建一个表
     *  sql:执行的SQL语句
     *  dataName:数据库名称
     */
    -(void)createTable:(NSString *)sql dataBaseName:(NSString *)dataName{
        sqlite3 *sqlite=nil;
        NSString *fileName=[self DataBaseName:dataName];
        //打开数据库
        int result= sqlite3_open([fileName UTF8String], &sqlite);
        if (result!=SQLITE_OK) {
            NSLog(@"打开失败");
        }else{
            const char* sqlCh=[sql UTF8String];
            char* error;
            //执行SQL
            int result=sqlite3_exec(sqlite, sqlCh, NULL, NULL, &error);
            if (result!=SQLITE_OK) {
                NSLog(@"创建失败");
                NSLog(@"%s",error);
                sqlite3_close(sqlite);
                return ;
            }
            //关闭数据库
            sqlite3_close(sqlite);
            NSLog(@"创建成功");
        }
        
    }
    
    
    
    @end
    

    4.调用格式

        
        BaseDB *db=[[BaseDB alloc] init];
        //创建表
        NSString *dbCreate=@"create table zhaochao( username text primary key,userPasswd test)";
        NSString *dbName=@"zhaochao.sqlite";
       // [db createTable:dbCreate dataBaseName:dbName];
        
        //添加数据
        NSString *insertTable=@"insert into zhaochao (username,userPasswd) values (?,?)";
        NSArray  *insertParmas=@[@"acasdfaa",@"bb"];
       // [db execSql:insertTable parmas:insertParmas dataBaseName:@"zhaochao.sqlite"];
        
        //修改数据
        NSString *updateTable=@"update zhaochao set username=? where username=?";
        NSArray  *updateParams=@[@"admin",@"zhaochao"];
       // [db execSql:updateTable parmas:updateParams dataBaseName:@"zhaochao.sqlite"];
        
        //删除数据
        NSString *deleteTable=@"delete from zhaochao where username=?";
        NSArray   *deleteParams=@[@"aa"];
       // [db execSql:deleteTable parmas:deleteParams dataBaseName:@"zhaochao.sqlite"];
        
        //查询数据
        NSString *selectTable=@"select username,userPasswd from zhaochao where userPasswd=?";
        NSString *selectParam=@[@"bb"];
        NSArray *result=[db selectSql:selectTable parmas:selectParam dataBaseName:@"zhaochao.sqlite"];
        for (int i=0; i<result.count; i++) {
            NSMutableDictionary *arr=[result objectAtIndex:i];
            NSLog(@"%@",arr);
        }
        
        



  • 相关阅读:
    数字建模工具
    博客园文档保存为pdf适合手机kindle阅读
    单点登录sso规范
    office在线预览方案
    KVM 虚机怎么热添加disk
    linux-基础FTP 协议传输
    TCP 三次握手四次挥手
    autossh 实现反向代理实现通过外网访问内网环境
    keepalived的工作原理
    openstack-ovs命令记录
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023435.html
Copyright © 2011-2022 走看看