使用SQLite存储和查询数据的简单实现(源代码+注释)

本文演示了在iOS应用中如何使用SQLite进行数据存储和查询。通过创建数据库、定义表结构、插入数据以及根据条件查询数据,展示了SQLite在iOS开发中的基本用法。源代码包含详细的注释,便于理解。

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

#import "ViewController.h"


    //定义宏方便引用


@interface ViewController ()


@end


@implementation ViewController

@synthesize name;

@synthesize classname;

@synthesize num;




//ps;;如果出现未能识别的错误,那那个错误很可能跟控件的输入输出口错误有关。主要是逻辑错误





-(NSString*)databasePath    //===========我把加载数据和获得路径的过程封装为一个方法

{


    NSString *docsDir;

    NSArray *dirPaths;

    

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    docsDir = [dirPaths objectAtIndex:0];

    

    NSString  *databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"info.db"]];//新建一个数据的名字

    

    return databasePath;       //返回路径

}


- (IBAction)touch:(id)sender {

    [NSThread sleepForTimeInterval:0.1];  //延迟动作发生产生一点动画效果

    CGAffineTransform pTransform = CGAffineTransformMakeTranslation(0, -100);

    //使视图使用这个变换

    self.view.transform  = pTransform;//移动view,不要挡着输入

    

 [UIView commitAnimations];  // 动画效果

}


- (IBAction)over:(id)sender {

    

[NSThread sleepForTimeInterval:0.1];

    

    CGAffineTransform

pTransform = CGAffineTransformMakeTranslation(0, 0);

    //使视图使用这个变换

    self.view.transform = pTransform;

    [UIView commitAnimations];

}


- (void)viewDidLoad

{

    NSLog(@"%@",NSHomeDirectory());

    

    

    [super viewDidLoad];

NSString *databasePath=[self databasePath];//调用我原来封装的方法

  

    

    NSFileManager *filemanager = [NSFileManager defaultManager];

    

    if ([filemanager fileExistsAtPath:databasePath] == NO) {

        const char *dbpath = [databasePath UTF8String];

        if (sqlite3_open(dbpath, &db)==SQLITE_OK)          //这里的db是之前的添加的  *db

        {

            char *errmsg;

            const char *createsql = "CREATE TABLE IF NOT EXISTS INFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, NUM TEXT, CLASSNAME TEXT,NAME TEXT)";//这里是sql语言的创建列表

            if (sqlite3_exec(db, createsql, NULL, NULL, &errmsg)!=SQLITE_OK) {

                //status.text = @"create table failed."; 用来提示的lable

                NSLog(@"woain");

            }

        }

     

    

    }

}


-(IBAction)viewclick:(id)sender{

    [num resignFirstResponder];       //uiview继承uicontrl可以实现这些方法

    [classname resignFirstResponder];

    [name resignFirstResponder];

}

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (IBAction)load:(id)sender {

    

  

    sqlite3_stmt *statement;

    NSString *databasePath=[self databasePath];

    const char *dbpath = [databasePath UTF8String];

    if (sqlite3_open(dbpath, &db)==SQLITE_OK) {

        NSString *querySQL = [NSString stringWithFormat:@"SELECT classname,name from info where num=\"%@\"",num.text];          //================这里就实现了用号码查询,其他的可以另外实现

        const char *querystatement = [querySQL UTF8String];

        

        if (sqlite3_prepare_v2(db, querystatement, -1, &statement, NULL)==SQLITE_OK) {

            

            if (sqlite3_step(statement)==SQLITE_ROW) {

                NSString *classnameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];

                classname.text = classnameField;

                NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];

              

                name.text = nameField;

                

                //status.text = @"find~~~";

            }

                        sqlite3_finalize(statement);

        }

        sqlite3_close(db);

    }}


- (IBAction)save:(id)sender {

    NSString *databasePath=[self databasePath];

    sqlite3_stmt *statement;

    

    const char *dbpath = [databasePath UTF8String];

    

    if (sqlite3_open(dbpath, &db)==SQLITE_OK)

    {

        if ([num.text isEqualToString:@""]) {

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SORRY!" message:@"number cannot be nil!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

            [alert show];

        }

        

        else {

            

            NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO INFO (num,classname,name) VALUES(\"%@\",\"%@\",\"%@\")",num.text,classname.text,name.text];

            const char *insertstaement = [insertSql UTF8String];

            sqlite3_prepare_v2(db, insertstaement, -1, &statement, NULL);

           

            NSLog(@"chenggong");

            if (sqlite3_step(statement)==SQLITE_DONE) {

               // status.text = @"save to DB.";

                num.text = @"";

                classname.text = @"";

                name.text = @"";

                NSLog(@"chenggong");

            }

            else{

                NSLog(@"sibai");

            }

            

            sqlite3_finalize(statement);

            sqlite3_close(db);

     

        }

        

    }

        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值