Insert into SQLite database with Swift 3

5k views Asked by At

I am trying to save data into an sqlite database with the below function.

func insertSpecieDetail(_ specieId: Int)
{
    //
    //  Create a temporary SpecieDetailModel for storing our values from the query.
    //
    let specieDetail: SpecieDetailModel = SpecieDetailModel()

    //
    //  Create an instance of our statement for SQLite to use.
    //
    var statement: OpaquePointer? = nil


    let update:String = String(format:SQL.InsertUserUpdates, specieId)
    if sqlite3_prepare_v2(self.database, update, -1, &statement, nil) == SQLITE_OK {

        sqlite3_bind_text(statement, 1, specieDetail.userCommonName, -1, nil);
        sqlite3_bind_text(statement, 2, specieDetail.userCommonNameFR, -1, nil);
        sqlite3_bind_text(statement, 3, specieDetail.userCommonNameES, -1, nil);
        sqlite3_bind_text(statement, 4, specieDetail.userCommonNameDE, -1, nil);
        sqlite3_bind_text(statement, 5, specieDetail.userNotes, -1, nil);

        if sqlite3_step(statement) == SQLITE_DONE {
            print("Successfully inserted row.")
        } else {
            print("Could not Update row.")
        }
    }

        sqlite3_finalize(statement)
}

SQL.InsertUserUpdates =

"INSERT INTO RL_Species (user_common_name, user_common_name_fr, user_common_name_es, user_common_name_de, user_notes) VALUE (?, ?, ?, ?, ?)" + "WHERE RL_Species.id = %d"

Not getting any errors, but the system is skipping over after the command:

if sqlite3_prepare_v2(self.database, update, -1, &statement, nil) == SQLITE_OK

On this same line, I checked what "update" equals and is below

"INSERT INTO RL_Species (user_common_name, user_common_name_fr, user_common_name_es, user_common_name_de, user_notes) VALUE (?, ?, ?, ?, ?)WHERE RL_Species.id = 8"

so it seems that the string is finding the specieId OK.

What am I missing?

UPDATE: Found the VALUE vs. VALUES error, but still am getting an error "near" WHERE.

func insertSpecieDetail(_ specieId: Int)
{
    //
    //  Create a temporary SpecieDetailModel for storing our values from the query.
    //
    let specieDetail: SpecieDetailModel = SpecieDetailModel()

    //
    //  Create an instance of our statement for SQLite to use.
    //
    var statement: OpaquePointer? = nil

    let update = "INSERT INTO RL_Species (user_common_name, user_common_name_fr, user_common_name_es, user_common_name_de, user_notes) VALUES ('\(specieDetail.commonName)', '\(specieDetail.commonNameFR)', '\(specieDetail.commonNameES)', '\(specieDetail.commonNameDE)', '\(specieDetail.userNotes)') WHERE RL_Species.id = '\(specieId)';"

    if sqlite3_prepare_v2(database, update, -1, &statement, nil) == SQLITE_OK {


        if sqlite3_step(statement) == SQLITE_DONE {
            print("Successfully inserted row.")
        } else {
            print("Could not Update row.")
        }
    } else {

        // forces SQLite to send error message
        let errorMessage = String.init(validatingUTF8: sqlite3_errmsg(database))!
        print("update failed! \(errorMessage)")        }

        sqlite3_finalize(statement)
}
0

There are 0 answers