У меня есть одна проблема со 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)
}