sqlite3_demo

本文档演示了如何在 iOS 应用中使用 SQLite3 进行数据库操作,包括初始化数据库、创建表、插入数据、获取所有数据。通过示例代码展示了如何连接数据库、执行 SQL 语句以及处理查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//记得先导入第三方类 sqlite3

#import <UIKit/UIKit.h>


#import <sqlite3.h>


@interface ViewController : UIViewController

{

    sqlite3 *_dataBase;

}

@property (retain, nonatomic) IBOutlet UITextView *textView;


@property (retain, nonatomic) IBOutlet UITextField *textFieldName;


@property (retain, nonatomic) IBOutlet UITextField *textFieldAge;


@property (retain, nonatomic) IBOutlet UITextField *textFieldSex;


@property (retain, nonatomic) IBOutlet UITextField *textFieldiID;


- (IBAction)saveButton:(id)sender;


- (IBAction)getButton:(id)sender;


- (BOOL)initDataBase:(NSString *)dbName;


- (BOOL)creatChannelsTable;


- (BOOL) insertOneChannel:(NSString *)name

                    cAge:(NSInteger )age

                 caddress:(NSString *)addr

                     cSex:(NSString *)sex;

//返回值 可变数组 (数组内存放多个字典 每个字典存储表中的一行的数据)

- (NSMutableArray *)getAlldata;

@end

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

    //调用函数

    [self initDataBase:@"member.db"];

}



- (IBAction)saveButton:(id)sender

{

    NSString *pName = self.textFieldName.text;

    NSInteger pAge = [self.textFieldAge.text integerValue];

    NSString *pAD = self.textFieldiID.text;

    NSString *pSex = self.textFieldSex.text;

    

    [self insertOneChannel:pName cAge:pAge caddress:pAD cSex:pSex];

}


- (IBAction)getButton:(id)sender

{

  

    NSMutableString *pResultStr = [NSMutableString string];

    NSMutableArray *pArr = [self getAlldata];

    for (int i =0; i < pArr.count; i++)

    {

        NSMutableDictionary *pTempDic = [pArr objectAtIndex:i];

        [pResultStr appendFormat:@"%@",[pTempDic objectForKey:@"name"]];

        [pResultStr appendString:@"\t"];

        [pResultStr appendFormat:@"%@",[pTempDic objectForKey:@"age"]];

        [pResultStr appendString:@"\t"];

        [pResultStr appendFormat:@"%@",[pTempDic objectForKey:@"add"]];

        [pResultStr appendString:@"\t"];

        [pResultStr appendFormat:@"%@",[pTempDic objectForKey:@"sex"]];

        [pResultStr appendString:@"\n"];

    }

    self.textView.text = pResultStr;

}

/*

 接口说明

 返回值:数据是否创建成功

 参数:要创建的数据库名称

 */

- (BOOL)initDataBase:(NSString *)dbName

{

    //查找沙河路径

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

    NSString *filePath = [paths objectAtIndex:0];

    NSString *path = [filePath stringByAppendingPathComponent:dbName];

    NSLog(@"path = %@",path);

    //打开文件

    if (sqlite3_open([path UTF8String], &_dataBase) != SQLITE_OK)

    {

        NSAssert(NO, @"打开数据失败");

        return NO;

    }

    NSLog(@"打开数据成功");

    /*

     创建表 待实现

     */

    [self creatChannelsTable];

    return YES;

}


- (BOOL)creatChannelsTable

{

    /*创建表得sql语句*/

    char *sql = "create table if not exists member(id integer primary key autoincrement , name text , age integer , addr text , sex text)";

    sqlite3_stmt *stmt;

    //判断编译语句结果是不是成功

    if (sqlite3_prepare_v2(_dataBase, sql, -1, &stmt, nil) != SQLITE_OK)

    {

        NSLog(@"创建表的sql语句编译失败");

        return NO;

    }

    NSLog(@"创建表的sql语句编译成功");

    //结果集中返回得列数

    int success = sqlite3_step(stmt);

    //判断是不是完成执行

    if (success != SQLITE_DONE)

    {

        NSLog(@"创建表失败");

        return NO;

    }

    NSLog( @" 创建表成功");

    return YES;

    

}


/*

 返回值 插入数据是不是成功

 参数:往表内要插入的数据 对应绑定参数

 */

- (BOOL) insertOneChannel:(NSString *)name

                    cAge:(NSInteger )age

                 caddress:(NSString *)addr

                     cSex:(NSString *)sex

{

    sqlite3_stmt *stmt;

    

    char *sql = "INSERT OR REPLACE INTO member(name,age,addr,sex) VALUES(?,?,?,?)";

    

    int success = sqlite3_prepare_v2(_dataBase, sql, -1, &stmt, nil);

    if (success != SQLITE_OK)

    {

        NSLog(@"插入参数的sql语句编译失败");

        return NO;

    }

    NSLog(@"插入参数的sql语句编译成功");

    sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);

    sqlite3_bind_int(stmt, 2, age);

    sqlite3_bind_text(stmt, 3, [addr UTF8String], -1, nil);

    sqlite3_bind_text(stmt, 4, [sex UTF8String], -1, nil);

    

    success = sqlite3_step(stmt);

    //重新设置一个已经准备好得状态对象

    sqlite3_finalize(stmt);

    if (success == SQLITE_ERROR)

    {

        NSLog(@"插入数据失败") ;

        return NO;

    }

    

    NSLog(@"插入数据成功");

    return YES;

}


- (NSMutableArray *)getAlldata

{

    NSMutableArray *allDatas =[[[NSMutableArray alloc]init]autorelease];

    sqlite3_stmt *stmt = nil;

    char *sql = "SELECT * FROM member";

    if (sqlite3_prepare_v2(_dataBase, sql, -1, &stmt, nil) != SQLITE_OK)

    {

        NSLog(@"读取表中的sql文件编译失败");

        return nil;

    }

    NSLog(@"读取表中的sql文件编译成功");

    while (sqlite3_step(stmt) == SQLITE_ROW)

    {

        NSMutableDictionary *tempDic = [[NSMutableDictionary alloc]init];

        char *pName = (char *)sqlite3_column_text(stmt, 1);

        if (pName)

        {

            [tempDic setObject:[NSString stringWithUTF8String:pName] forKey:@"name"];

        }

        NSInteger nAge = (int)sqlite3_column_int(stmt, 2);

        if (nAge)

        {

            [tempDic setObject:[NSNumber numberWithInteger:nAge] forKey:@"age"];

        }

        char *pAdd = (char *)sqlite3_column_text(stmt, 3);

        if (pName)

        {

            [tempDic setObject:[NSString stringWithUTF8String:pAdd] forKey:@"add"];

        }

        char *pSex = (char *)sqlite3_column_text(stmt, 4);

        if (pName)

        {

            [tempDic setObject:[NSString stringWithUTF8String:pSex] forKey:@"sex"];

        }

        [allDatas addObject:tempDic];

        [tempDic release];

    }

    sqlite3_finalize(stmt);

    return allDatas;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    [self.view endEditing:YES];

}

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

}

- (void)dealloc

{

    [_textFieldAge release];

    

    [_textFieldiID release];

    

    [_textFieldName release];

    

    [_textFieldSex release];

    

    [_textView release];

    [super dealloc];

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值