【iOS知识学习】_iOS下SQLite的使用

本文介绍如何在iOS应用中使用SQLite数据库进行学生信息的保存与查询,包括数据库创建、信息保存与查询操作的实现,以及触摸屏幕关闭键盘的方法。详细步骤包括在.h文件中引用SQLite库、创建数据库、保存信息、查询操作和关闭键盘的实现。

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

SQLite是嵌入式的和轻量级的sql数据库。广泛用于包括浏览器、ios、android以及一些便携需求的小型web应用系统。

SQLite是MySQL的精简版,无需服务器就能进行;限制条件:必须手动创建数据库,没有面向对象的接口;
Demo做了个简单的保存学生信息的例子,点击保存按钮可以保存信息,点击查询可以查询信息,Demo下载地址:http://download.youkuaiyun.com/detail/weasleyqi/4706760 。

要想在工程中使用SQLite,需要将SQLite的库添加到工程:

在本工程中的.h文件中引用这个库:
[css]  view plain copy
  1. <span style="font-size:14px;">#import "sqlite3.h"</span>  
创建数据库:
接下来如果该数据库不存在需要创建这个数据库,创建的过程写在viewDidLoad里面:
[css]  view plain copy
  1. <span style="font-size:14px;">- (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view, typically from a nib.  
  5.       
  6.     NSString *docsDir;  
  7.     NSArray *dirPaths;  
  8.       
  9.     dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  10.     docsDir = [dirPaths objectAtIndex:0];  
  11.       
  12.     databasePath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"info.db"]];  
  13.       
  14.     NSFileManager *filemanager = [NSFileManager defaultManager];  
  15.       
  16.     if ([filemanager fileExistsAtPath:databasePath] == NO) {  
  17.         const char *dbpath = [databasePath UTF8String];  
  18.         if (sqlite3_open(dbpath, &dataBase)==SQLITE_OK) {  
  19.             char *errmsg;  
  20.             const char *createsql = "CREATE TABLE IF NOT EXISTS INFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, NUM TEXT, CLASSNAME TEXT,NAME TEXT)";  
  21.             if (sqlite3_exec(dataBase, createsql, NULL, NULL, &errmsg)!=SQLITE_OK) {  
  22.                 status.text = @"create table failed.";  
  23.             }  
  24.         }  
  25.         else {  
  26.             status.text = @"create/open failed.";  
  27.         }  
  28.     }  
  29. }</span>  
因为SQLite数据库是文件数据库,是保存在文件系统中的,ios下:
  • Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
  • tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
  • Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
我们的数据库文件是保存在Documents下的。
切记,因为用的是C语法,sqlite3_open传入的是database的地址!

保存信息:
[css]  view plain copy
  1. <span style="font-size:14px;">- (IBAction)saveinfo:(id)sender {  
  2.     sqlite3_stmt *statement;  
  3.       
  4.     const char *dbpath = [databasePath UTF8String];  
  5.       
  6.     if (sqlite3_open(dbpath, &dataBase)==SQLITE_OK) {  
  7.         if ([num.text isEqualToString:@""]) {  
  8.             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SORRY!" message:@"number cannot be nil!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  9.             [alert show];  
  10.         }  
  11.         else {  
  12.           
  13.         NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO INFO (num,classname,name) VALUES(\"%@\",\"%@\",\"%@\")",num.text,classname.text,name.text];  
  14.         const char *insertstaement = [insertSql UTF8String];  
  15.         sqlite3_prepare_v2(dataBase, insertstaement, -1, &statement, NULL);  
  16.         if (sqlite3_step(statement)==SQLITE_DONE) {  
  17.             status.text = @"save to DB.";  
  18.             num.text = @"";  
  19.             classname.text = @"";  
  20.             name.text = @"";  
  21.         }  
  22.         else {  
  23.             status.text = @"save failed!";  
  24.         }  
  25.         sqlite3_finalize(statement);  
  26.         sqlite3_close(dataBase);  
  27.         }  
  28.     }  
  29. }</span>  

在往数据库里面插入数据的时候,我们需要先打开数据库,然后执行插入语句,结束的时候切记要关闭数据库!

查询操作:
[css]  view plain copy
  1. <span style="font-size:14px;">- (IBAction)searchResult:(id)sender {  
  2.     const char *dbpath = [databasePath UTF8String];  
  3.       
  4.     sqlite3_stmt *statement;  
  5.       
  6.     if (sqlite3_open(dbpath, &dataBase)==SQLITE_OK) {  
  7.         NSString *querySQL = [NSString stringWithFormat:@"SELECT classname,name from info where num=\"%@\"",num.text];  
  8.         const char *querystatement = [querySQL UTF8String];  
  9.         if (sqlite3_prepare_v2(dataBase, querystatement, -1, &statement, NULL)==SQLITE_OK) {  
  10.             if (sqlite3_step(statement)==SQLITE_ROW) {  
  11.                 NSString *classnameField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];  
  12.                 classname.text = classnameField;  
  13.                 NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];  
  14.                 name.text = nameField;  
  15.                   
  16.                 status.text = @"find~~~";                  
  17.             }  
  18.             else {  
  19.                 status.text = @"did not find you need.";  
  20.             }  
  21.             sqlite3_finalize(statement);  
  22.         }  
  23.         sqlite3_close(dataBase);  
  24.     }  
  25. }</span>  

查询操作同样也是需要先打开数据库,再查询,最后关闭数据库,在这里就指定了根据学号来查询,其他情况未涉及。


在本例中还涉及一个 触摸屏幕来关闭键盘:
在viewcontroller.h中添加申明代码:
[css]  view plain copy
  1. <span style="font-size:14px;">- (IBAction)backgroundTap:(id)sender;  
  2. </span>  
通过触摸屏幕来关闭键盘需要我们的.xib文件的class为UIControl,点击viewController.xib文件,选中view,打开 Identity Inspector,在class中选择UIConrol,再选择Connector Inspector,找到Touch Down,把圆圈中的线映射到刚刚的IBAction;

在viewController.m文件中实现该方法:
[css]  view plain copy
  1. - (IBAction)backgroundTap:(id)sender {  
  2.     [num resignFirstResponder];  
  3.     [classname resignFirstResponder];  
  4.     [name resignFirstResponder];  
  5. }  
这样,基本上就完成了,代码的下载地址: http://download.youkuaiyun.com/detail/weasleyqi/4706760
希望对大家有帮助!
文章出处:http://blog.youkuaiyun.com/weasleyqi/article/details/8132646

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值