2017-07-07 100 views
0

我试图获取参数的名称,但出现了问题。无法在sqlite3中获取绑定参数名称

代码:(最少的代码重新产生问题)

var db: OpaquePointer? = nil 
var rc: Int32 = 0 
rc = sqlite3_open("test.db", &self.db) 
if rc != SQLITE_OK 
{ 
    print("cant open") 
} 
var statement: OpaquePointer? = nil 
let sql = "insert into testtable values(?123);" 
rc = sqlite3_prepare_v2(db, sql, -1, &statement, nil) 
if rc != SQLITE_OK 
{ 
    print("cant prepare") 
} 
print(String(cString: sqlite3_bind_parameter_name(statement, 1))) // returns nil 
sqlite3_finalize(statement) 
sqlite3_close(db) 

我得到的参数名称,如果我用@AAA:AAA$AAA但我得到nil如果我使用?123?NNN格式)。但根据website我应该得到?123作为String

我在做什么错?

谢谢。

+0

在上面的问题中哪个是正确的?这个sqlite3_close(db)或者这个sqlite3_close(语句) – ArgaPK

回答

2

当您指定?123时,123是索引。所以你需要通过123,而不是1,致电sqlite3_bind_parameter_name

您可以在documentation中看到更多关于sqlite3_bind_xxx功能的更多信息。

+0

我认为'?NNN'格式与其他格式('?AAA','@ AAA','$ AAA')一样工作。感谢您的澄清。 – unknownymouse

+1

带有'AAA'的名字被命名。带有'NNN'的编号。名称以1开头,然后上升。编号的人有这个具体的号码。 – rmaddy

+0

@rmaddy在上述问题中是否正确?此sqlite3_close(db)或此sqlite3_close(语句) – ArgaPK