ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

ios开发中如何使用sqlite数据库

2021-07-02 15:51:30  阅读:206  来源: 互联网

标签:sqlite int NSLog 数据库 ios stmt sqlite3 NULL


ios开发中如何使用sqlite数据库

首先,使用sqlite存储数据,需要添加libsqlite3.dylib 这个动态库,然后 添加动态库的主头文件 #import <sqlite3.h>

// db就是数据库的象征,如果要进行CRUD(增删改查),得操作db这个实例
@property (nonatomic, assign) sqlite3 *db;

 

第一步: 打开数据库。 当系统第一次用到数据库时, 我们先创建一个数据库文件,并创建表,就在这一步。

// 获得数据库文件的路径,即沙盒
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"];
// 将OC字符串 转成 C语言字符串
const char *cfilename = filename.UTF8String;
// 1.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件)
int result = sqlite3_open(cfilename, &_db);    // 这个open方法 就是打开数据库,传一个c语言的字符串和 db
if (result == SQLITE_OK) { // 打开成功
  NSLog(@"成功打开数据库");

// 2.创表
const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";
  char *erroMsg = NULL;
  result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg);
if (result == SQLITE_OK) {
  NSLog(@"成功创表");
} else {

  NSLog(@"创表失败--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__);  //这个可以知道 错误在哪个文件的 第几行
}
} else {
  NSLog(@"打开数据库失败");
}

 

第二部 : 插入/添加数据

下面以插入/添加 20条数据为例:

for (int i = 0; i<20; i++) {
// 1.拼接SQL语句
  NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)];
  int age = arc4random_uniform(20) + 30;
  NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES ('%@', %d);", name, age];   // 看清该方法INSERT INTO

// 2.执行SQL语句
  char *erroMsg = NULL;
  sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg);  //该sqlite方法就是 插入数据库数据
  if (erroMsg) {  //如果有错误
  NSLog(@"插入数据失败--%s", erroMsg);
  } else {
  NSLog(@"成功插入数据");
  }
}

删除数据 和插入数据 一样,只需更换一下 sql语句。

查询数据:

const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;";  //sql语句,查询条件
// 进行查询前的准备工作
// -1 代表系统会自动计算SQL语句的长度
// sqlite3_stmt:用来取数据


sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL语句没有问题
NSLog(@"查询语句没有问题");

// 每调一次sqlite3_step函数,stmt就会指向下一条记录
  while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一条记录
// 取出数据

// 取出第0列字段的值(int类型的值)
  int ID = sqlite3_column_int(stmt, 0);

// 取出第1列字段的值(tex类型的值)
  const unsigned char *name = sqlite3_column_text(stmt, 1);

// 取出第2列字段的值(int类型的值)
  int age = sqlite3_column_int(stmt, 2);

  NSLog(@"%d %s %d", ID, name, age);
}
} else {
  NSLog(@"查询语句有问题");
}

标签:sqlite,int,NSLog,数据库,ios,stmt,sqlite3,NULL
来源: https://blog.51cto.com/u_15285469/2970900

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有