0

I am creating a ContactCard app and I have a bug with writing to the database. My write method:

func create(contact: Contact) {

    let query = "INSERT INTO contact (Voornaam, Achternaam, Telefoonnummer, Email, Adres, Huisnummer, Toevoeging, Woonplaats, Postcode, Geboortedatum, Afbeelding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
    var statement : OpaquePointer? = nil

    let jpegCompressionQuality: CGFloat = 0.9 // Set this to whatever suits your purpose

    if let base64String = UIImageJPEGRepresentation((contact.image), jpegCompressionQuality)?.base64EncodedString(){
        if sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK {
            sqlite3_bind_text(statement, 1, contact.firstName, -1, nil);
            sqlite3_bind_text(statement, 2, contact.lastName, -1, nil);
            sqlite3_bind_text(statement, 3, contact.phone, -1, nil);
            sqlite3_bind_text(statement, 4, contact.email, -1, nil);
            sqlite3_bind_text(statement, 5, contact.street, -1, nil);
            sqlite3_bind_text(statement, 6, contact.houseNumber, -1, nil);
            sqlite3_bind_text(statement, 7, contact.toevoeging, -1, nil);
            sqlite3_bind_text(statement, 8, contact.city, -1, nil);
            sqlite3_bind_text(statement, 9, contact.zip, -1, nil);
            sqlite3_bind_text(statement, 10, contact.date, -1, nil);
            sqlite3_bind_text(statement, 11, base64String, -1, nil);

            contacten.append(contact)

            if sqlite3_step(statement) != SQLITE_DONE {
                print("Error inserting row")
            }
        } else {
            print("Error")
        }
    }

    sqlite3_reset(statement);
    sqlite3_finalize(statement);
}

If I read after the write method is this the output:

enter image description here

One value is correct and that is the "date" value. The other values are all incorrect. Someone a idea?

My reading method works because I have standard one record in my database and that works fine.

Reading method:

func read() {

    let query = "SELECT * FROM contact;"

    var statement : OpaquePointer? = nil
    if sqlite3_prepare_v2(db, query, -1, &statement, nil) != SQLITE_OK {
        let errmsg = String(cString: sqlite3_errmsg(db))
        print("error query: \(errmsg)")
    }

    while sqlite3_step(statement) == SQLITE_ROW {
        let contact = Contact()

        contact.firstName = String(cString: sqlite3_column_text(statement, 0))
        contact.lastName = String(cString: sqlite3_column_text(statement, 1))
        contact.phone = String(cString: sqlite3_column_text(statement, 2))
        contact.email = String(cString: sqlite3_column_text(statement, 3))
        contact.street = String(cString: sqlite3_column_text(statement, 4))
        contact.houseNumber = String(cString: sqlite3_column_text(statement, 5))
        contact.toevoeging = String(cString: sqlite3_column_text(statement, 6))
        contact.city = String(cString: sqlite3_column_text(statement, 7))
        contact.zip = String(cString: sqlite3_column_text(statement, 8))
        contact.date = String(cString: sqlite3_column_text(statement, 9))
        let imageData = NSData(base64Encoded: String(cString: sqlite3_column_text(statement, 10)), options: .ignoreUnknownCharacters)

        if (imageData?.length)! > 0{
            contact.image = UIImage(data: imageData as! Data)!
        }
        contacten.append(contact)
    }
}

1 Answer 1

1

The fifth parameter of sqlite3_bind_text() must not be nil. Unless you know better, use SQLITE_TRANSIENT.

Sign up to request clarification or add additional context in comments.

3 Comments

Do you have an example?
Or can you maybe add the code in my code? I will appreciate that :)
@AbusiveVids Simply replace nil with SQLITE_TRANSIENT in the 5th parameter in your calls to sqlite3_bind_text.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.