IOS学习笔记 ---- 15/09/14

1.Sqlite3数据库的创建顺序:

  1. 先使用C语言函数 [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] 来获得数据库的Document目录,再通过 stringByAppendingPathComponent 方法来拼接出数据库文件目录;
  2. 创建一个sqlite3的指针对象,并且赋予NULL值;
  3. 使用C语言函数 sqlite3_open(数据库目录.UTF8String, &sqlite3指针对象);
  4. 通过使用if语句判断打开数据库函数的返回值是否为 SQLITE_OK 来判断是否打开成功;

2.Sqlite3数据库表的创建顺序:

  1. 先创建 const char *sql,指针对象用来存放sql语句;
  2. 创建 char *errorMesg = NULL;
  3. 使用C语言函数 sqlite3_exec(sqlite3指针对象, sql语句, NULL, NULL, &errorMesg) 方法来执行sql语句,同样有一个int类型的返回值,可以和创建数据库第四步一样来判断,如果失败可以使用%s直接打印errorMesg来判断成功或者失败;

3.Sqlite3数据库的update以及delete操作顺序和创建表的差不多,只需要更改下语句就行了。

4.Sqlite3数据库的查询语句顺序比较复杂,如下:

  1. 定义一个 const char *sql 语句;
  2. 定义一个 sqlite3_stmt 指针对象;
  3. 使用 sqlite3_prepare_v2(sqlite指针对象, sql语句, -1(数据的长度,-1则会自动计算), stmt指针对象地址, NULL) 来检测sql语句的合法性;
  4. 通过返回值判断是否正确;
  5. 如果正确,则使用 while (sqlite_step(stmt) == SQLITE_ROW) 判断是否查到一行;
  6. 在循环的时候使用 sqlite_column_数据类型(结果指针对象, 列号) C语言函数来获得;

5.在定义查询语句的时候应该把等号右边的字符串变为?,然后在执行前使用 sqlite_bind_数据类型(结果集指针对象, 问号的索引(从1开始), 要替换的数据, -1(数据的长度,-1则会自动计算), NULL(回调函数));



上个礼拜一直在做小练习,做了一个礼拜的界面,也遇到了一些问题,同时也解决了一部分,虽然解决方式有点取巧,但是我觉得先解决问题再考虑优化才是开发的最好方式。这礼拜边学边开始实现练习的逻辑部分。

时间: 2024-10-11 23:56:56

IOS学习笔记 ---- 15/09/14的相关文章

IOS学习笔记 ---- 15/09/02

1.三种方式监听方式: addTarget方法: 使用代理方法: [[NSNotificationCenter defaultCenter] addObserver]方法监听通知: 2.在storyboard删除原来的ViewController后再添加NavigationController时没有自动设置成initial View Controller,需要手动设置. 3.push方法已经不推荐使用,现在的show方法相当于以前的push. 4.如果使用按钮拖线到另一个ViewControll

IOS学习笔记 ---- 15/09/07

1.TableView自带滑动删除功能,只要实现代理的方法tableView:commitEditingStyle:forRowAtIndexPath:方法即可,在方法中做数据的操作,刷新表格就行. 2.刷新表格有两种方法: tableView:reloadRowsAtIndexPath:该方法使用前提是模型数据与tableView的行数要求一致. tableView:deleteRowsAtIndexPath:该方法使用前提是模型数据删除的个数和表格删掉的行数要一致. 3.编辑状态只要修改ta

IOS学习笔记 ---- 15/09/06

1.prepareForSegue进行的时候,目标控制器的所有view还没创建,此时对其中的对象进行操作是无效的,应该在viewDidLoa方法中实现所需要的赋值等操作. 2.修改表内数据的时候,如果跳转下一个页面传递的时候直接进行赋值,传递的是指针,在另一个页面修改完毕后关闭页面,直接reloadTable就达到修改的效果了. 3.TableViewCell如果是通过storyboard或者xib创建的则不会调用init开头的方法(initWithCoder是特例),只会调用awakeFrom

IOS学习笔记 ---- 15/08/31

1.pch文件中的代码是全局的,不管是#import头文件还是#define宏,都可以在项目中的所有文件中使用.(凡是涉及到OC语法的内容都要放入到#ifdef __OBJC__  #endif中).2.pch中最好使用下面的宏对NSLog函数进行替换,在发布的时候直接将后部的NSLog进行注释则代码中不会打印任何值. #define MyLog(...) NSLog(__VA_ARGS__) 3.IOS在未打包状态的时候会默认有一个DEBUG宏,在打包后则会自动删除,可以利用判断来优化上方代码

iOS学习笔记 15:separatorInset设置UITableView的分割线无效的问题

一.问题描述 UITableView分割线要显示到最左端 查看UITableView的属性,发现设置separatorInset的值可以自定义分割线的位置. @property (nonatomic) UIEdgeInsets separatorInset NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR; // allows customization of the frame of cell separators 打印separatorInset,其默

iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Type

值和引用类型 Value and Reference Types 在Swift中,有两种数据类型. 一是"值类型"(value type), 它是每一个实例都保存有各自的数据,通常定义为struct, enum或tuple. 二是"引用类型"(reference types),它是多实例共享一份数据,这种类型通常定义为class. 在本文中,我们将展示值类型和引用类型各自的优点以及如何在二者之间选择. 它们有什么区别? 最基本的区别是 "值类型"

iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Types)

值和引用类型 Value and Reference Types 在Swift中,有两种数据类型. 一是"值类型"(value type), 它是每一个实例都保存有各自的数据,通常定义为struct, enum或tuple. 二是"引用类型"(reference types),它是多实例共享一份数据,这种类型通常定义为class. 在本文中,我们将展示值类型和引用类型各自的优点以及如何在二者之间选择. 它们有什么区别? 最基本的区别是 "值类型"

iOS: 学习笔记, 添加一个带界面约束的控制器

1. 创建一个空iOS应用程序(Empty Application). 2. 添加加控制器类. 修改控制器类的viewDidLoad 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 //创建标题 5 UILabel *header = [[UILabel alloc] init]; 6 header.text = @"欢迎来到我的世界!"; 7 header.textAlignment = NSTextAlignmentCenter

iOS学习笔记-精华整理

iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁. 2-成员属性:     readonly:不指定readonly,默认合成getter和setter方法.外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全