2017-07-07 1 views
0

Ich versuche, die Namen der Parameter zu erhalten, aber etwas läuft schief.Name des Bindungsparameters kann nicht in sqlite3 abgerufen werden

Code: (minimaler Code neu zu produzieren das Problem)

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) 

ich Parameternamen, wenn ich @AAA verwenden, :AAA, $AAA aber ich bekomme nil wenn ich ?123 (?NNN-Format) verwenden. Aber nach website sollte ich ?123 als String bekommen.

Was mache ich falsch?

Vielen Dank.

+0

in der obigen Frage, die richtig zu tun ist? Dieses sqlite3_close (db) oder dieses sqlite3_close (statement) – ArgaPK

Antwort

2

Wenn Sie ?123 angeben, ist 123 der Index. Sie müssen also die Nummer 123, nicht 1, an den Anruf an sqlite3_bind_parameter_name übergeben.

Sie können mehr in den documentation für die sqlite3_bind_xxx Funktionen sehen.

+0

Ich dachte '' NNN'-Format funktioniert genauso wie andere Formate ('? AAA',' @ AAA', '$ AAA'). Danke für die Klarstellung. – unknownymouse

+1

Die mit 'AAA' heißen. Der mit 'NNN' ist nummeriert. Die Namen beginnen mit 1 und gehen nach oben. Die nummerierten haben diese spezifische Nummer. – rmaddy

+0

@rmaddy in der obigen Frage, die richtig ist zu tun? Diese sqlite3_close (db) oder diese sqlite3_close (Anweisung) – ArgaPK

Verwandte Themen