let file_url = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil,create: false).appendingPathComponent("asd.db")
var db:OpaquePointer? = nil
if sqlite3_open(file_url.path, &db) == SQLITE_OK
{
print("Successfully opened connection database!!")
var q:OpaquePointer? = nil
if sqlite3_prepare_v2(db, "SELECT * FROM aaa", -1, &q, nil) == SQLITE_OK
{
if sqlite3_step(q) == SQLITE_ROW
{
let res = sqlite3_column_text(q, 1)
let name = String(cString: res!) }
else
{
print("ERROR1!!!!!")
}
}
else
{
print("ERROR!2!!!!")
}
}
Run Code Online (Sandbox Code Playgroud)
我在proejct中有一个名为"asd.db"的数据库文件,我正在尝试打开并从数据库中读取数据.
我不知道为什么但sqlite3_open无法找到我的数据库文件,所以它创建了一个没有我的表的新文件.
我该如何解决?
我得到了用户默认值,例如键"abc",它包含一个字符串.
存储在此密钥中的最后一个字符串是"aaa".
现在,我想为此密钥存储一个额外的值,但我不想删除最后一个值"aaa",因为我需要它.
我希望在第二个retreive中包含一个包含数组的字符串:["aaa","some_other_value","some_other_value2"...].
到目前为止,这是我的代码,用于存储用户默认值中的信息:
self.user_defaults.set(self.myTextField.text, forKey:"asd")
Run Code Online (Sandbox Code Playgroud)
这是获取数据的代码:
if let arr = user_defaults.string(forKey:"asd"){
print (arr)
}
Run Code Online (Sandbox Code Playgroud) if sqlite3_prepare_v2(db, "select a from aaa", -1, &q,nil) == SQLITE_OK {
while sqlite3_step(q) == SQLITE_ROW {
let res = sqlite3_column_text(q, 1)
print(res)
}
} else {
print("NOT WORKING")
NSLog("%s", sqlite3_errmsg(db))
}
Run Code Online (Sandbox Code Playgroud)
在我的表aaa中,我有一个名为“ a”的字段,其值是1,2,3,如下所示:
我试图将这些值放入数组中或只是打印它们,但是当我打印时(print(res)),这些值只是“ nil”。
我如何获得真实价值?
编辑:值(1,2,3)是字符串而不是标记,这就是为什么我选择sqlite3_column_text()而不是sqlite3_column_int()