编辑:现在,我知道我的查询语句没有结果了……
如何在Swift中使用局部变量编写Select语句。
我有50多个列,如何将数组中的所有列名连接起来?
let queryStatementStringSearch = "SELECT * FROM TABLE where Col1 = (?);"
var queryStatement: OpaquePointer? = nil
// 1
if sqlite3_prepare_v2(db, queryStatementStringSearch=, -1, &queryStatement, nil) == SQLITE_OK {
sqlite3_bind_text(queryStatement, 1, userInput, -1, nil)
// 2
if sqlite3_step(queryStatement) == SQLITE_ROW {
// 3
let id = sqlite3_column_int(queryStatement, 0)
// 4
let queryResultCol1 = sqlite3_column_text(queryStatement, 1)
let name = String(cString: queryResultCol1!)
// 5
print("Query Result:")
print("\(id) | \(name)")
} else {
print("Query returned no results")
}
} else {
print("SELECT statement could not be prepared")
}
答案 0 :(得分:1)
您的“ SELECT”语句应为:
SELECT * FROM TABLE where Col1 = ?
对sqlite3_bind_xxx
的调用期望从1开始的列号。您正在传递索引2
,但它必须为1
。
sqlite3_bind_text(queryStatement, 1, userInput, -1, nil)
确保您在准备好的语句上调用sqlite3_finalize
。
使用SELECT *
也是一个坏主意。明确列出列名。这样可以确保在调用sqlite3_column_xxx
时,传递的索引(从0开始,而不是从1开始)索引到固定位置的已知列。