sqlite3增删查改应用

创建一个数据库(包括int 类型的id,string 类型的name),并对其进行增删改查

实现步骤:

1.创建一个SingleViewApplication应用。

    sqlite3数据库可以采用MesaSQLite可视化工具

2.添加sqlite3支持的库文件,libsqlite3.dylib

3.创建viewController控制器,布局好界面

ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
- (IBAction)addClick:(id)sender;
- (IBAction)deleteClick:(id)sender;
- (IBAction)updateClick:(id)sender;
- (IBAction)selectClick:(id)sender;
@property (retain, nonatomic) IBOutlet UITextField *idText;
@property (retain, nonatomic) IBOutlet UITextField *nameText;
- (IBAction)viewClick:(id)sender;
@property (retain, nonatomic) IBOutlet UISearchBar *txtSearchBar;

@end

ViewController.m:

#import "ViewController.h"
#import <sqlite3.h>
#define kFilename @"Homeworkdb.rdb"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSString *)dataFilePath
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * document = [path objectAtIndex:0];
    return [document stringByAppendingPathComponent:kFilename];
}

//增加
- (IBAction)addClick:(id)sender {
    //创建
    sqlite3 * database;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }

    NSString * creataSQL = @"CREATE TABLE IF NOT EXISTS FIELDS" "(id INTEGER PRIMARY KEY,name TEXT);";
    char * errorMsg;
    if(sqlite3_exec(database, [creataSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Error creating table:%s",errorMsg);
    }

    char * update = "insert or replace into FIELDS (id, name)" "values (?,?);";
    sqlite3_stmt * stmt;
    if(sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK)
    {
        sqlite3_bind_int(stmt, 1, [self.idText.text intValue]);   //1表示第一个问号
        sqlite3_bind_text(stmt, 2, [self.nameText.text UTF8String], -1, NULL);//2表示第二个问号
    }
    if(sqlite3_step(stmt)!=SQLITE_DONE)
    {
        NSAssert(0, @"Error updating table:%s",errorMsg);
    }
    sqlite3_finalize(stmt);      //这句话不能漏

    sqlite3_close(database);   //关闭数据库

    UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"友情提示" message:@"添加成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [a show];
}

//删除
- (IBAction)deleteClick:(id)sender {
    sqlite3 * database;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }

    NSString * creataSQL = @"CREATE TABLE IF NOT EXISTS FIELDS" "(id INTEGER PRIMARY KEY,name TEXT);";
    char * errorMsg;
    if(sqlite3_exec(database, [creataSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Error creating table:%s",errorMsg);
    }

        char * del = "delete from FIELDS where id = ?;";
        sqlite3_stmt * stmt;
        if(sqlite3_prepare_v2(database, del, -1, &stmt, nil) == SQLITE_OK)
        {
            sqlite3_bind_int(stmt, 1, [self.idText.text intValue]);   //1表示第一个问号
        }
        if(sqlite3_step(stmt)!=SQLITE_DONE)
        {
            NSAssert(0, @"Error delete table:%s",errorMsg);
        }
        sqlite3_finalize(stmt);      

    sqlite3_close(database);

    UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"友情提示" message:@"删除成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [a show];
}

//修改
- (IBAction)updateClick:(id)sender {
    sqlite3 * database;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }

    NSString * creataSQL = @"CREATE TABLE IF NOT EXISTS FIELDS" "(id INTEGER PRIMARY KEY,name TEXT);";
    char * errorMsg;
    if(sqlite3_exec(database, [creataSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Error creating table:%s",errorMsg);
    }

    char * update = "update FIELDS set id = ?,name = ? where id = ?";
    sqlite3_stmt * stmt;
    if(sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK)
    {
        sqlite3_bind_int(stmt, 1, [self.idText.text intValue]);   //1表示第一个问号
        sqlite3_bind_text(stmt, 2, [self.nameText.text UTF8String], -1, NULL);//2表示第二个问号
        sqlite3_bind_int(stmt, 3, [self.idText.text intValue]);
    }
    if(sqlite3_step(stmt)!=SQLITE_DONE)
    {
        NSAssert(0, @"Error updating table:%s",errorMsg);
    }
    sqlite3_finalize(stmt);      //这句话不能漏

    sqlite3_close(database);   //关闭数据库

    UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"友情提示" message:@"修改成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [a show];
}

//查询
- (IBAction)selectClick:(id)sender {
    //创建数据库
    sqlite3 * database;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Failed to open database");
    }

    NSString * creataSQL = @"CREATE TABLE IF NOT EXISTS FIELDS" "(id INTEGER PRIMARY KEY,name TEXT);";
    char * errorMsg;
    if(sqlite3_exec(database, [creataSQL UTF8String], NULL, NULL, &errorMsg)!=SQLITE_OK)
    {
        sqlite3_close(database);
        NSAssert(0, @"Error creating table:%s",errorMsg);
    }

    NSString * query = @"select * from FIELDS where id = ?";
    sqlite3_stmt * statement;
    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        sqlite3_bind_int(statement, 1, [self.txtSearchBar.text intValue]);
        //sqlite3_bind_text(statement, 2, [self.nameText.text UTF8String], -1, NULL);
        while(sqlite3_step(statement) == SQLITE_ROW)
        {
            int id = sqlite3_column_int(statement, 0);    //0表示第1列
            char * name = (char *)sqlite3_column_text(statement, 1);  //1表示第2列

            NSString * sid = [[NSString alloc] initWithFormat:@"%d",id];
            NSString * sname = [[NSString alloc] initWithUTF8String:name];
            self.nameText.text = sname;
            self.idText.text = sid;
            UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"友情提示" message:@"查询成功" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [a show];
        }

        sqlite3_finalize(statement);
    }
    else
    {
        NSLog(@"error");
    }

    sqlite3_close(database);
}

- (void)dealloc {
    [_idText release];
    [_nameText release];
    [_txtSearchBar release];
    [super dealloc];
}
- (IBAction)viewClick:(id)sender {
    [self.idText resignFirstResponder];
    [self.nameText resignFirstResponder];
}
@end
时间: 2024-10-29 18:40:31

sqlite3增删查改应用的相关文章

qt-如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新

问题描述 如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新 本人是个菜鸟在做一个简单的同学录系统,这是进入之后的界面 我想实现鼠标选取一个表格点击"修改同学信息"之后能对它在修改并且修改确定后能同步刷新MySQL数据库而且表格中的数据也更新. 下面是我的代码:#include ""record.h""#include ""ui_record.h""#include &qu

Java中单向链表的实现:增删查改功能

写一个大家都比较熟悉的数据结构:单向链表. 不过先告诉大家一个小秘密,java的API里面已经提供了单向链表的类,大家可以直接拿来用,不过学习数据结构课程的时候想必大家也已经知道,虽然系统会给我们提供一些常用的数据结构,但是自定义的总是能够带来不同的喜感的,而且通过自己的编写也更能够让我们了解其中实现的过程,而且我们还可以写一些比较个性化的方法作为属于自己的数据结构.这里主要是介绍一些常用结构里面都会用到的方法,以及链表具体是如何操作的. 首先,单链表相对于队列的优势在于存储地址不是连续的,这样

mysql-如何用JSTL JDBC MYSQL 实现增删查改?

问题描述 如何用JSTL JDBC MYSQL 实现增删查改? TOMCAT.ECLIPSE.JSP.JSTL.JDBC.MYSQL 我是一个刚入门的小白.先谢谢前辈了. 想用jstl jdbc向MYSQL里插入数据,更新,删除. 网上查了资料都是insert into t_student values(null,"XXX","XXX,"XXX,"X");这种. 我想在<input type="text" 里自己设定值

多级索引算法只增删查改

问题描述 多级索引算法只增删查改 多级索引算法 在链表描述的具有length个元素的集合中进行搜索,至多需要length次访问节点.如果在链的中部节点加一个指针,并记录头部到中部的距离,则访问的节点数可以减少到n/2+1次.搜索时,首先将欲搜索的索引与头部到中部的距离进行比较,如果欲搜索的索引较小,则仅需搜索链表的左半部,否则,只要从中部开始搜索右半部. 图3-1a的链表中有七个元素.该链表有一个头节点和一个尾节点.节点中的数表示该节点的索引值.如果要访问索引值为7的节点,对该链表的搜索要进行七

visual studio-2010vs C#和sql的.CS的环境下实现学生信息增删查改?

问题描述 2010vs C#和sql的.CS的环境下实现学生信息增删查改? 如何在vs c#和sql .cs的环境中实现对学生信息的增删查改呢? 各路老师们教教我这个初学者吧! 解决方案 参考这个完整的程序http://download.csdn.net/download/sjdongfang/2173372 解决方案二: 增删查改是编程的基本操作,很多教程都有介绍..自己从基础上做的话,要sql语句,还有C#的基本语法.增删查改是比较简单的. 相关知识点的话就是: 1.sql语句对数据库的增删

界面-列表增删查改数据库字段值

问题描述 列表增删查改数据库字段值 网页主界面页面上显示一些数据列表,然后我想对页面上的数据进行修改.修改后能够自动的对数据进行入库保存,而且是对已有的数据进行更新,数据库中没有的数据进行自动插入.而且最好是可复用性高,对任何数据表的任何数据字段都可以进行保存,并且更新条件最好是可以自定义设置.用JS+java实现,本人对代码只是略懂,最好是实现起来简单. 解决方案 这个问题实现的方法比较多,不过如果对于初学者,不管哪种实现方式,写代码都不简单.因为要从数据库取数,把数据显示在网页上,还需要获取

iis-用VS建立的webservice,连接sql对数据库进行增删查改,怎么样发布到IIS上

问题描述 用VS建立的webservice,连接sql对数据库进行增删查改,怎么样发布到IIS上 用vs调试已经实现和数据库的增删查改功能,但发布使用文件系统发布,显示不支持数据库,要怎么样发布才支持数据库,在IIS中进行增删查改呢? 解决方案 怎么显示的不支持数据库,检查你的web.config怎么配置的,连接字符串怎么写的,目标计算机上是否安装了sql server 解决方案二: 点击发布的时候目标文件夹选的是iis网页的文件夹,然后点击下一步,就出现此发布方法不支持数据库的发布 web.c

wpf将excel数据导入listview上并显示,然后对Listview进行增删查改

问题描述 wpf将excel数据导入listview上并显示,然后对Listview进行增删查改 不知道怎样显示到listview上面,就是点击按钮的时候就会显示 解决方案 先把Excel里的数据读出来,给你个读Excel的方法: public static DataSet LoadDataFromExcel(string sFilePath) { try { string strConn; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Sou

java中sql语句的具体用法,增删查改

问题描述 java中sql语句的具体用法,增删查改 java中sql语句的具体用法,增删查改,如何用动态的方法改变查找的位置,输出的位置,判断这个数据是否存在于数据库中 解决方案 这问题有自己思考过么 解决方案二: https://www.baidu.com/link?url=jykznQpWlQYTk0AcnMob3UN-B_iYzOccrutv00x5SAaAVNOYO8xApShvC6wqWeG9NYgnkacMB-lvt08dSMc68a&wd=&eqid=a253ae6e0001