ios中sqlite数据库的原生用法

概述

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

在ios中,也一样支持sqlite。目前有不少第三方库,封装了sqlite操做,好比swift语言写的SQLite.swift、苹果官网也为咱们封装了一个框架:CoreDataios

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

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

在Xcode中引入sqlite API

新建一个swift项目后,咱们须要让项目引入sqlite的动态连接库: sql

一、项目配置界面,选择Build Phases 数据库


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


完成后: app

三、建立桥接文件,在项目目录下新建一个头文件(h): 框架

四、而后使用import导入sqlite库: ide

#import "sqlite3.h"

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

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

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

要建立或者打开一个sqlite数据库,使用sqlite3_open方法,咱们无需手动建立一个数据库文件,若是没有文件,sqlite3_open方法会为咱们自动建立数据库文件,而后打开数据库。

//数据库存放路径
let sqlitepath = NSHomeDirectory().stringByAppendingPathComponent("Documents/sqlite3.db")
//打开数据库,指定数据库文件路径,若是文件不存在后先建立文件,再打开,因此无需手动建立文件
let state = sqlite3_open(sqlitepath, &db)
if state == SQLITE_OK{
    println("打开数据库成功")
}else{
    println("打开数据库失败")
}
这里 sqlite3_open方法的第二个参数是一个指针,是数据库打开后返回的一个操做指针,经过使用它,咱们能够对数据库进行一系列的操做。咱们先把它定义在外面,方便咱们使用。
var db:COpaquePointer = nil
override func viewDidLoad() {
    super.viewDidLoad()
    ...
}

建立表和删除表

使用sqlite3_exec方法能够执行一段sql语句,主要就是sql语句的差别,其余都同样:

//建立表
let createtable = "create table if not exists students (id integer primary key autoincrement,name
text,stuId integer)"
let result = sqlite3_exec(db, createtable, nil, nil, nil)
if result == SQLITE_OK{
    println("建立表成功")
}
//删除表
let removetable = "drop table studets"
let result2 = sqlite3_exec(db, removetable, nil, nil, nil)
if result2 == SQLITE_OK{
    println("删除表成功")
}

插入更新删除数据

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

//插入数据
let inserttable = "insert into studets (stuId,name) values(?,?)"
var statement:COpaquePointer = nil
let result3 = sqlite3_prepare_v2(db, inserttable, -1, &statement, nil)
if result3 == SQLITE_OK{
    //绑定数据
    sqlite3_bind_int(statement, 1, 1)
    sqlite3_bind_text(statement, 2, "lijialong", -1, nil)
    
    //执行
    if sqlite3_step(statement) == SQLITE_DONE{
        println("数据插入成功")
    }
    sqlite3_finalize(statement)
 }

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

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)
删除数据:
let deleterow = "delete from studets where name='lijialong'"
sqlite3_prepare_v2(db, deleterow, -1, &statement, nil)
sqlite3_step(statement)
sqlite3_finalize(statement)

查询数据

//查询数据
let query = "select * from studets"
//这条执行后,数据就已经在sattement中了
sqlite3_prepare_v2(db, query, -1, &statement, nil)
//游标往下走一步,若是返回SQLITE_ROW就进入
while sqlite3_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

相关文章
相关标签/搜索