2015-06-18 22 views
5

Próbuję dodać kolumnę do tabeli z szybkim.jak dodać kolumnę w tabeli sqlite w SWIFT

mój kod:

connect_db(); 
    adddbfield("mynewfield","mytable"); 

.

func connect_db() -> Bool { 
    let sDBPath=<is correctly set>; 
    if sqlite3_open(sDBPath, &db) != SQLITE_OK { 
     println("Failed to open db") 
     return false; 
    }else{ 
     return true; 
    } 
} 

.

func adddbfield(sFieldName:String, sTable:String) -> Bool { 
    var bReturn:Bool=false; 
    var sSQL="ALTER TABLE " + sTable + " ADD COLUMN " + sFieldName + " INTEGER DEFAULT -1"; 
    var statement:COpaquePointer = nil 
    if sqlite3_prepare_v2(db, sSQL, -1, &statement, nil) != SQLITE_OK { 
     println("Failed to prepare statement") 
    }else{ 
     println("field " + sFieldName + " added to " + sTable); 
     bReturn=true; 
    } 
    return bReturn; 
} 

Przy pomocy tego kodu nie jest dodawane żadne pole i nie występuje błąd. Każda pomoc? (Chciałbym użyć natywnego dostępu do sqlite i żadnej dodatkowej biblioteki)

+0

Jakie są wyniki uzyskiwane z konsoli? Również nie zadzwoniłeś do sqlite3_step() i sqlite3_finalize() –

Odpowiedz

4

Przygotowujesz tylko oświadczenie, nie wykonując go. Musisz zadzwonić pod numer sqlite3_step() i sqlite3_finalize() metody zakończenia procesu.

func adddbfield(sFieldName:String, sTable:String) -> Bool 
{ 
    var bReturn:Bool = false; 
    var sSQL="ALTER TABLE " + sTable + " ADD COLUMN " + sFieldName + " INTEGER DEFAULT -1"; 
    var statement:COpaquePointer = nil 
    if sqlite3_prepare_v2(db, sSQL, -1, &statement, nil) != SQLITE_OK 
    { 
     println("Failed to prepare statement") 
    } 
    else 
    { 
     if sqlite3_step(statement) == SQLITE_DONE 
     { 
      println("field " + sFieldName + " added to " + sTable); 
     } 
     sqlite3_finalize(statement); 
     bReturn=true; 
    } 
    return bReturn; 
} 
+0

Po prostu zapomniałem kroku, wielkie dzięki! –

+0

@mcflysoft: Z przyjemnością. Szczęśliwe kodowanie! –