我一直在試圖弄清楚我的邏輯。我執行以下操作來打開我的資料庫:
func createDB() -> OpaquePointer?{
var db : OpaquePointer?
guard sqlite3_open(path, &db) == SQLITE_OK else {
print("error opening database")
sqlite3_close(db)
db = nil
return nil
}
return db
}
然后我嘗試執行以下select陳述句:
let queryString = "select photo_id from unsplash_photos"
var statement: OpaquePointer?
if(sqlite3_prepare_v2(db, queryString, -1, &statement, nil)) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing select: \(errmsg)")
}
var rc = sqlite3_step(statement)
while rc == SQLITE_ROW {
print("row",rc)
rc = sqlite3_step(statement)
}
當這個運行時,結果是每一步列印 100。
row 100
row 100
row 100
row 100
row 100
row 100
row 100
row 100
row 100
這與資料庫的設定方式有關嗎?這與桌子的位置有關嗎?
uj5u.com熱心網友回復:
是的,它告訴你它找到了 9 行資料,每次都回傳SQLITE_ROW( 100)。如果要提取資料,則必須呼叫sqlite3_column_xxx()以獲取相應行的資料。例如,sqlite3_column_int如果photo_id是整數:
let queryString = "select photo_id from unsplash_photos"
var statement: OpaquePointer?
guard sqlite3_prepare_v2(db, queryString, -1, &statement, nil) == SQLITE_OK else {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing select: \(errmsg)")
return
}
var rc = sqlite3_step(statement)
// as long as there's a row of data returned, display it
while rc == SQLITE_ROW {
let id = sqlite3_column_int(statement, 0)
print("id =", id)
rc = sqlite3_step(statement)
}
// at the end, we should have gotten `SQLITE_DONE`, and if not, show the error
if rc != SQLITE_DONE {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("rc =", rc, "error = ", errmsg)
}
// clean up when we're done
sqlite3_finalize(statement)
uj5u.com熱心網友回復:
SQLITE_ROW是一個值為 100 的條件代碼。根據此頁面,這意味著“sqlite3_step() 已準備好另一行” 。它不是回傳的行數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/352000.html
