之前有转发过一个sqlite3的使用.也因为这个写过一个游戏~使用到了sqlite3
不过因为朋友试玩后觉得太困难了这个游戏.所以就打消了上架商店的念头.
因为整个数据库当时设计的很简单只有一个表.而且内也只有一个分数记录的字段.所以代码会很简单
现在将这个游戏中使用到的sqlite3的类整理下发出来
class Sql {
var dbName:String //数据库名字
var path = "\(NSHomeDirectory())/Documents" //路径为:主目录/文档
var dbHandler:COpaquePointer = nil //C指针
init(dbname:String) {
self.dbName = dbname
}
}
首先很清楚的就是一个叫Sql的类.
还定义了几个变量以及初始化的时候给一个数据库的名字则可以
接下来为开发数据库
//打开数据库
//如果数据库不存在则会创建一个
func OpenDataBase() {
let dataPath = "\(path)/\(dbName)" //存放数据库路径
// println(dataPath)
let result = sqlite3_open(dataPath, &dbHandler)
if result != SQLITE_OK {
print("aaaa")
CloseDataBase()
}
}
打开完毕后会继续调用创建一个表
//创建表
func CreatTable() -> Bool {
let sql = "CREATE TABLE HighScore(score INTEGER)"
let result = sqlite3_exec(dbHandler, sql, nil, nil, nil)
//如果不等于SQLITE_OK 则证明该表已经创建了则直接返回false
if result != SQLITE_OK {
return false
}
else {
return true
}
}
添加数据
//添加数据
func InserIntoData() {
//初始化最高分为0
let score = 0
let sqlInsert = "INSERT INTO HighScore(score) VALUES(?) "
var stmt:COpaquePointer = nil
// var result = sqlite3_exec(dbHandler, sqlInsert, nil, nil, nil)
let result = sqlite3_prepare_v2(dbHandler, sqlInsert, -1, &stmt, nil)
if result == SQLITE_OK {
sqlite3_bind_int(stmt, 1, Int32(score))
print("插入成功")
}
if sqlite3_step(stmt) != SQLITE_DONE {
print("不成功")
sqlite3_finalize(stmt)
}
}
更新
//如果分数超过最高分就修改数据库内的分数
func UpdataHighScore(score:Int) {
// var Inset = "INSERT INTO HighScore(score) VALUES(?)"
// var stmt:COpaquePointer = nil
// var result = sqlite3_prepare_v2(dbHandler, Inset, -1, &stmt, nil)
// if result == SQLITE_OK {
// sqlite3_bind_int(stmt, 1, Int32(score))
// }
// var result1 = sqlite3_step(stmt)
// if result1 != SQLITE_DONE {
// println("Not")
// sqlite3_finalize(stmt)
// }
let Update = "UPDATE HighScore Set score=\(score)"
let result = sqlite3_exec(dbHandler, Update, nil, nil, nil)
if result != SQLITE_OK {
print("更新不成功")
}
}
更新我根据自己在网上搜索资料得到这两种的更新方式.
查询//查询数据库中最高分
func SelectHighScore() -> Int {
var highScore = 0
var stmt:COpaquePointer = nil
let sql = "SELECT MAX(score) FROM HighScore"
let result = sqlite3_prepare_v2(dbHandler, sql, -1, &stmt, nil)
if result == SQLITE_OK {
if sqlite3_step(stmt) == SQLITE_ROW {
highScore = Int(sqlite3_column_int(stmt, 0))
}
}
sqlite3_finalize(stmt)
return highScore
}
关闭数据库
//关闭数据库
func CloseDataBase() {
sqlite3_close(dbHandler)//关闭数据库
dbHandler = nil
}
整体都是很简单的一些小demo代码
不过想想曾经因为是新增还是修改的时候忘记释放那个叫C指针的家伙(貌似是这个原因)导致我很久都纠结不报错就是存不进数据的原因.