博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios sqlite3 初级应用
阅读量:5126 次
发布时间:2019-06-13

本文共 2710 字,大约阅读时间需要 9 分钟。

在ios中,持久化用好几种 方法,前面已经介绍了 两种 ,一个是简单的写入文件,另一个是加入了序列化并写入文件中,现在介绍 ios 中嵌入式数据库sqlite3的初级应用 当然在使用sqlite3之前  你需要将libsqlite3.dylib这个类库加入到你的项目中

//

- (NSString *)dataFilePath{

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDirectory = [paths objectAtIndex:0];
 return [documentsDirectory stringByAppendingPathComponent:kFilename];
}

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

 NSString *documentsDirectory = [paths objectAtIndex:0]; //首先得到应用程序沙盒中Document文件夹的路径

return [documentsDirectory stringByAppendingPathComponent:kFilename]//返回你指定文件的路径

//

打开数据库

sqlite3 *database;

 if (sqlite3_open([filePath UTF8String], &database)) {
  sqlite3_close(database);
  NSAssert(0,@"Failed to open database");
 }

///

创建数据库

char *errorMsg;

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

查询

 NSString *query = @"SELECT ROW, FIELD_DATA FROM FIELDS ORDER BY ROW";
 sqlite3_stmt *statement;
 if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK) {
  while (sqlite3_step(statement)==SQLITE_ROW) {
   int row = sqlite3_column_int(statement, 0);
   char *rowData = (char *)sqlite3_column_text(statement, 1);
   
   //NSString *fieldName = [[NSString alloc] initWithFormat:@"field&d",row];
   //NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];
   
   //UITextField *field = [self valueForKey:fieldName];
   //field.text = fieldValue;
   //[fieldName release];
   //[fieldValue release];
  }
  sqlite3_finalize(statement);
 }
 sqlite3_close(database);

 插入 更新

sqlite3 *database;
 if (sqlite3_open([[self dataFilePath] UTF8String], &database)) {
  sqlite3_close(database);
  NSAssert(0,@"Failed to open database");
 }
 
 for (int i=1; i<=4; i++) {
  NSString *fieldName = [[NSString alloc] initWithFormat:@"field%d",i];
  UITextField *field = [self valueForKey:fieldName];
  [fieldName release];
  
  char *errorMsg;
  char *update = "INSERT OR REPLACE INTO FIELDS (ROW,FIELD_DATA) VALUES(?,?);"; //这里插入的值可以用nsstring替换,但是最好的做法是使用绑定,如果遇到特殊字符 这是不二选择
  
  sqlite3_stmt *stmt;
  if (sqlite3_prepare_v2(database, update, -1, &stmt, nil)==SQLITE_OK) {
   sqlite3_bind_int(stmt, 1, i);
   sqlite3_bind_text(stmt, 2, [[field text] UTF8String], -1, NULL);
  }
  if (sqlite3_step(stmt)!=SQLITE_DONE) {
   NSAssert(0,@"Error updating table:%s",errorMsg);
  }
  sqlite3_finalize(stmt);
 }
 sqlite3_close(database);

这是最基础的sqlite3在ios中的应用 方法的具体应用请查询文档

posted on
2012-03-12 11:41 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/Kiros/archive/2012/03/12/2391529.html

你可能感兴趣的文章
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>