Вставить данные с Sqlite в быстром, и у меня есть то же значение в двух столбцах - PullRequest
0 голосов
/ 24 октября 2018

У меня есть одна проблема со Swift, когда я использую Sqlite.У меня есть четыре столбца в моей таблице, и я пытаюсь вставить значение.

Sqlite положить одно и то же значение столбцов ном и столбцов преном.Я не могу найти почему.Мой viewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()

    afficherCheminApplication()

    if let bd = ouvrirBaseSqlLite() {
        insererPersonne(nom: "Perrin", prenom: "David", age: "36", db: bd)
    }
}

Моя задача создать базу данных Я думаю, что это правильно?

func ouvrirBaseSqlLite() -> OpaquePointer? {

    var db: OpaquePointer? = nil

    let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        .appendingPathComponent("ExempleBd.sqlite")

    if sqlite3_open(fileURL.path, &db) != SQLITE_OK {

        print("Erreur lors de l'ouverture de la base de données !")
        return nil
    }

    if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Personne (idPersonne INTEGER PRIMARY KEY AUTOINCREMENT, \n"
                        + "nom varchar, \n"
                        + "prenom varchar, \n "
                        + "age INTEGER)", nil, nil, nil) != SQLITE_OK {

        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("error creating table: \(errmsg)")
        return nil
    }

    print("Connection bd réussie")

    return db
}

Моя функция тонна вставляет значения в базу данных Я не знаю, почему при открытии базы данных яесть «Давид» в столбцах ном и «Давид» в столбцах преном

func insererPersonne(nom xNom : String, prenom xPrenom : String, age xAge : String, db : OpaquePointer) {

    if xNom.count < 4, xPrenom.count < 4,
        xAge.count < 1, xAge.count > 3 {
        return
    }

    var stmt: OpaquePointer?

    let queryString = "INSERT INTO Personne (nom, prenom, age) VALUES (?, ?, ?);"
    //let queryString = "INSERT INTO Personne (nom, prenom, age) VALUES ('Perrin', 'Dave', 33);"

    if sqlite3_prepare_v2(db, queryString, -1, &stmt, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("Erreur lors de la preparation du insert : \(errmsg)")
        return
    }

    if sqlite3_bind_text(stmt, 1, xNom.cString(using: String.Encoding.utf8), -1, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("Erreur lors de la creation du nom : \(errmsg)")
        return
    }

    if sqlite3_bind_text(stmt, 2, xPrenom.cString(using: String.Encoding.utf8), -1, nil) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("Erreur lors de la creation du prenom : \(errmsg)")
        return
    }

    if sqlite3_bind_int(stmt, 3, (xAge as NSString).intValue) != SQLITE_OK{
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("Erreur lors de la creation de l'âge : \(errmsg)")
        return
    }

    if sqlite3_step(stmt) != SQLITE_DONE {
        let errmsg = String(cString: sqlite3_errmsg(db)!)
        print("Erreur lors de l'insertion de la nouvelle personne : \(errmsg)")
        return
    }

    sqlite3_finalize(stmt)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...