IOS中sqlite数据库的原生用法

来源:互联网 发布:淘宝网打底长袖裙韩版 编辑:程序博客网 时间:2024/06/06 03:32
摘要 概述 sqlite数据库相信各位早已耳闻,当年我在做C# winform时就已经玩过了,非常轻巧的一个数据库,数据库仅一个文件,即建即用。 在ios中,也同样支持sqlite。目前有很多第三方库,封装了sqlite操作,比如swift语言写的SQLite.swift、苹果官网也为我们封装了一个框架:CoreData。 它们都离不开Sqlite数据库的支持。 本文主要介绍下,如何在swift中使用原…
database ios sqlite

目录[-]

  • 概述
  • 在Xcode中引入sqlite API
  • 创建(打开)与关闭数据库
  • 创建表和删除表
  • 插入更新删除数据
  • 查询数据
  • 概述

    sqlite数据库相信各位早已耳闻,当年我在做C# winform时就已经玩过了,非常轻巧的一个数据库,数据库仅一个文件,即建即用。

    在ios中,也同样支持sqlite。目前有很多第三方库,封装了sqlite操作,比如swift语言写的SQLite.swift、苹果官网也为我们封装了一个框架:CoreData

    它们都离不开Sqlite数据库的支持。

    本文主要介绍下,如何在swift中使用原生的sqlite的API。

    在Xcode中引入sqlite API

    新建一个swift项目后,我们需要让项目引入sqlite的动态链接库:

    1、项目配置界面,选择Build Phases


    2、点开Link Binary With Libraries,点击+号,在弹窗中输入sqlite3


    完成后:

    3、创建桥接文件,在项目目录下新建一个头文件(h):

    4、然后使用import导入sqlite库:

    ?
    1
    #import "sqlite3.h"

    5、最后一步,在项目配置界面,选择Build Setting,搜索框中输入swift,在结果中选择Objective-C Bridging Header,输入刚才新建的桥接文件的名称:

    整个引入工作已经完成了,可以测试下是否引入成功,在swift文件中,输入sqlite3,看是否有sqlite3相关的智能提示出来。

    创建(打开)与关闭数据库

    要创建或者打开一个sqlite数据库,使用sqlite3_open方法,我们无需手动创建一个数据库文件,如果没有文件,sqlite3_open方法会为我们自动创建数据库文件,然后打开数据库。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //数据库存放路径
    let sqlitepath = NSHomeDirectory().stringByAppendingPathComponent("Documents/sqlite3.db")
    //打开数据库,指定数据库文件路径,如果文件不存在后先创建文件,再打开,所以无需手动创建文件
    let state = sqlite3_open(sqlitepath, &db)
    ifstate == SQLITE_OK{
        println("打开数据库成功")
    }else{
        println("打开数据库失败")
    }
    这里 sqlite3_open方法的第二个参数是一个指针,是数据库打开后返回的一个操作指针,通过使用它,我们可以对数据库进行一系列的操作。我们先把它定义在外面,方便我们使用。
    ?
    1
    2
    3
    4
    5
    var db:COpaquePointer = nil
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
    }

    创建表和删除表

    使用sqlite3_exec方法可以执行一段sql语句,主要就是sql语句的差异,其他都一样:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //创建表
    letcreatetable = "create table if not exists students (id integer primary key autoincrement,name
    text,stuId integer)"
    letresult = sqlite3_exec(db, createtable, nil, nil, nil)
    ifresult == SQLITE_OK{
        println("创建表成功")
    }
    //删除表
    letremovetable = "drop table studets"
    letresult2 = sqlite3_exec(db, removetable, nil, nil, nil)
    ifresult2 == SQLITE_OK{
        println("删除表成功")
    }

    插入更新删除数据

    插入数据使用了占位符,sql语句中使用问号代表值。使用sqlite3_bind_xxx来绑定值。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //插入数据
    let inserttable = "insert into studets (stuId,name) values(?,?)"
    var statement:COpaquePointer = nil
    let result3 = sqlite3_prepare_v2(db, inserttable, -1, &statement, nil)
    ifresult3 == SQLITE_OK{
        //绑定数据
        sqlite3_bind_int(statement, 1, 1)
        sqlite3_bind_text(statement, 2, "lijialong", -1, nil)
         
        //执行
        ifsqlite3_step(statement) == SQLITE_DONE{
            println("数据插入成功")
        }
        sqlite3_finalize(statement)
     }

    更新数据也类似几个步骤:

    ?
    1
    2
    3
    4
    5
    let updatetable = "update studets set name ='ss' where id = 1"
    var statement:COpaquePointer = nil
    sqlite3_prepare_v2(db, updatetable, -1, &statement, nil)
    sqlite3_step(statement)
    sqlite3_finalize(statement)
    删除数据:
    ?
    1
    2
    3
    4
    let deleterow = "delete from studets where name='lijialong'"
    sqlite3_prepare_v2(db, deleterow, -1, &statement, nil)
    sqlite3_step(statement)
    sqlite3_finalize(statement)

    查询数据

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //查询数据
    let query = "select * from studets"
    //这条执行后,数据就已经在sattement中了
    sqlite3_prepare_v2(db, query, -1, &statement, nil)
    //游标往下走一步,如果返回SQLITE_ROW就进入
    whilesqlite3_step(statement) == SQLITE_ROW{
        let id = sqlite3_column_int(statement, 0)
        let stuId = sqlite3_column_int(statement, 2)
    }

    tips:

    本文由wp2blog导入,原文链接:http://devonios.com/ios-sqlite.html

    0 0
    原创粉丝点击