专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

SQLiteManager创建数据表

  • 如果是第一次运行,打开数据库之后,只能得到一个空的数据,没有任何的数据表
  • 为了让数据库正常使用,如果数据表不存在,需要执行 创表 操作

注意:创表操作本质上是通过执行 SQL 语句实现的

  • 创建数据表

      /**
       *  通过数据库名称打开数据库
       *  @param dbName 数据库名称
       */
      - (void)openDatabaseWithName:(NSString *)dbName {
          NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
          NSLog(@"documentPath = %@", documentPath);
    
          // 拼接数据库路径
          NSString *dbPath = [documentPath stringByAppendingPathComponent:dbName];
    
          // const char *filename: 数据库路径
          // sqlite3 **ppDb: 数据库指针
          int openResult = sqlite3_open(dbPath.UTF8String, &_db);
    
          if (openResult == SQLITE_OK) {
              NSLog(@"打开数据库成功");
    
              // 创建表
              NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, height REAL);";
    
              char *errmsg;
              // sqlite3 *: 数据库指针
              // const char *sql: 要执行的sql语句
              // int (*callback)(void *, int, char **, char **): sql语句执行后的回调
              // void *: sql语句执行后的回调第一个参数的地址
              // char **errmsg: 错误信息
              int createTableResult = sqlite3_exec(_db, createTableSql.UTF8String, NULL, NULL, &errmsg);
              if (createTableResult == SQLITE_OK) {
                  NSLog(@"执行SQL成功");
              } else {
                  NSString *errorString = [NSString stringWithCString:errmsg encoding:NSUTF8StringEncoding];
                  NSLog(@"执行SQL失败: %@", errorString);
              }
          } else {
              NSLog(@"打开数据库失败");
          }
      }
    
  • 其他地方也需要执行 SQL 语句,抽取 执行 SQL 语句函数

      /**
       *  执行SQL语句
       *  @param sqlString 要执行的SQL
       *  @return 执行的结果: 成功或失败
       */
      - (BOOL)execSQL:(NSString *)sqlString {
          char *errmsg;
          // sqlite3 *: 数据库指针
          // const char *sql: 要执行的sql语句
          // int (*callback)(void *, int, char **, char **): sql语句执行后的回调
          // void *: sql语句执行后的回调第一个参数的地址
          // char **errmsg: 错误信息
          int createTableResult = sqlite3_exec(_db, sqlString.UTF8String, NULL, NULL, &errmsg);
          if (createTableResult == SQLITE_OK) {
              NSLog(@"执行SQL成功");
          } else {
              NSString *errorString = [NSString stringWithCString:errmsg encoding:NSUTF8StringEncoding];
              NSLog(@"执行SQL失败: %@", errorString);
          }
    
          return createTableResult == SQLITE_OK;
      }
    
代码小结
  • 创表 SQL 可以从 Navicat 中粘贴,然后做一些处理
    • " 替换成 '
    • 在每一行后面增加一个 \n 防止字符串拼接因为缺少空格造成 SQL 语句错误
    • 表名 前添加 IF NOT EXISTS防止因为数据表存在出现错误

调试代码中的SQL

  • SQL 打印出来
  • 粘贴到 Navicat 里来执行,可以更好的定位 SQL 语句错误的位置
  • 在拼接 SQL 时,最好在每句后面加 \n.可以避免缺少空格把2个单词误认为一个单词

results matching ""

    No results matching ""