SQLite函数总结
1.打开数据库
int sqlite3_open(
const char *filename,
sqlite3 **ppDb
);
2.执行任何SQL语句
int sqlite3_exec(
sqlite3*,
const char *sql,
int (*callback)(void*,int,char**,char**),
void *,
char **errmsg
);
3.检查SQL语句的合法性(查询前的准备)
int sqlite3_prepare_v2(
sqlite3 *db,
const char *zSql,
int nByte,
sqlite3_stmt **ppStmt,
const char **pzTail
);
4.查询一行数据
int sqlite3_step(sqlite3_stmt*);
5.利用stmt获得某一字段的值(字段的下标从0开始)
double sqlite3_column_double(sqlite3_stmt*, int iCol);
int sqlite3_column_int(sqlite3_stmt*, int iCol);
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
- 如何封装工具类,来做数据库操作,总结如下步骤
- 0.封装⼯工具类,来做数据库操作设计成单例
- 1.打开或者创建数据库sqlite3_open
- 2.创建表sqlite3_exec
- 3.添加/修改/删除sqlite3_exec
- 4.查询数据sqlite3_prepare_v2
附上代码:
存储对象Person类
import UIKit
class Person: NSObject {
var age : Int = 0
var name : String?
init(dict : [String : AnyObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
func insertPerson() {
let tempName = name == nil ? "" : name!
let insertSQL = "INSERT INTO t_person (name, age) VALUES ('\(tempName)', \(age))"
if SQLiteManager.shareIntance.execSQL(insertSQL) {
print("插入成功")
}
}
}
工具类
import UIKit
class SQLiteManager: NSObject {
static let shareIntance : SQLiteManager = SQLiteManager()
var db : COpaquePointer = nil
override init() {
super.init()
openDB("demo.sqlite")
}
func openDB(dbName : String) {
guard var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first else {
print("没有获取到路径")
return
}
path = (path as NSString).stringByAppendingPathComponent(dbName)
print(path)
SQLITE_OK
if sqlite3_open(path, &db) != SQLITE_OK {
print("打开或者创建数据库失败")
return
}
createTable()
}
func createTable() {
let createTableSQL = "CREATE TABLE IF NOT EXISTS t_person ( \n" +
"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +
"name TEXT, \n" +
"age INTEGER\n" +
");"
if execSQL(createTableSQL) {
print("创建表成功")
}
}
func execSQL(sqlString : String) -> Bool {
return sqlite3_exec(db, sqlString, nil, nil, nil) == SQLITE_OK
}
func querySQL(querySQL : String) -> [[String : AnyObject]]? {
var stmt : COpaquePointer = nil
if sqlite3_prepare_v2(db, querySQL, -1, &stmt, nil) != SQLITE_OK {
print("没有准备好查询")
return nil
}
var dictArray = [[String : AnyObject]]()
while sqlite3_step(stmt) == SQLITE_ROW {
dictArray.append(getRecord(stmt))
}
return dictArray
}
func getRecord(stmt : COpaquePointer) -> [String : AnyObject] {
let count = sqlite3_column_count(stmt)
var dict = [String : AnyObject]()
for i in 0..<count {
let cKey = sqlite3_column_name(stmt, i)
guard let key = String(CString: cKey, encoding: NSUTF8StringEncoding) else {
continue
}
let cValue = UnsafePointer<Int8>(sqlite3_column_text(stmt, i))
guard let value = String(CString: cValue, encoding: NSUTF8StringEncoding) else {
continue
}
dict[key] = value
}
return dict
}
}
在控制器
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
loadPersonData()
}
func loadPersonData() {
let querySQL = "SELECT name, age FROM t_person;"
guard let array = SQLiteManager.shareIntance.querySQL(querySQL) else {
return
}
var persons : [Person] = [Person]()
for dict in array {
let p = Person(dict: dict)
persons.append(p)
}
}
func deleteData() {
let deleteSQL = "DELETE FROM t_person WHERE id = 1;"
if SQLiteManager.shareIntance.execSQL(deleteSQL) {
print("删除成功")
}
}
func updateData() {
let updateSQL = "UPDATE t_person SET name = 'lmj' WHERE id = 1;"
if SQLiteManager.shareIntance.execSQL(updateSQL) {
print("修改成功")
}
}
func insertData(name : String, age : Int) {
let p = Person(dict: ["name" : name, "age" : age])
p.insertPerson()
}
}