我正在练习使用SQLite练习与数据库的连接,但有一个问题,我的数据库已创建,并且该表具有不同的字段,我的表的ID是主键,一个字段用于名称和一个姓氏字段,问题在于信息存储在数据库中,但是在查询信息时,姓氏与名称存储在同一字段中,因为在查询时,它返回两倍的姓氏keep < / p>
我试图查阅信息,并在插入信息时发现问题,但我不知道是什么原因
这是我用来创建数据库的代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let fileUrl = try!
FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("MGrex.sqlite")
if sqlite3_open(fileUrl.path, &db) != SQLITE_OK{
print("Error al abrir la base de datos")
}
let createTableQuery = "CREATE TABLE IF NOT EXISTS Gear (id INTEGER PRIMARY KEY AUTOINCREMENT, nombre TEXT, apellido TEXT)"
if sqlite3_exec(db, createTableQuery, nil, nil, nil) != SQLITE_OK
{
print("Error al crear la tabla")
}
print("Everything is fine")
}
这是我的IBAction,在其中我从TextField检索名称和姓氏,验证它们是否为空,然后执行查询:
@IBAction func agregar(_ sender: Any) {
let nombre = nombreTextFiel.text?.trimmingCharacters(in: .whitespacesAndNewlines)
let apellido = apellidoTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines)
if(nombre?.isEmpty)!{
print("El nombre esta vacio")
return;
}
if(apellido?.isEmpty)!{
print("El apellido esta vacio")
return;
}
var stmt: OpaquePointer?
let insertQuery = "INSERT INTO Gear (nombre, apellido) VALUES (?,?)"
if(sqlite3_prepare(db, insertQuery, -1, &stmt, nil)) != SQLITE_OK{
print("Error al iniciar la consulta")
}
if sqlite3_bind_text(stmt, 1, nombre, -1, nil) != SQLITE_OK{
print("Error al guardar el nombre")
}
if sqlite3_bind_text(stmt, 2, apellido, -1, nil) != SQLITE_OK{
print("Error al guardar el apellido")
}
//Para registrar un int es el siguiente metodo
//if(sqlite3_bind_int(stmt, 2, (apellido! as NSString.intValue))) != SQLITE_OK{
// print("Error al guardar un numero int")
//}
if (sqlite3_step(stmt) == SQLITE_DONE){
print("Datos agregados")
}
}
这是我用来查询记录的代码:
override func viewDidLoad() {
super.viewDidLoad()
//Primero abrimos una conexion a la base de datos
let fileUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("MGRex.sqlite")
if sqlite3_open(fileUrl.path, &db) != SQLITE_OK{
print("Error al abrir la base de datos")
}
}
这是我执行查询的IBAction:
@IBAction func consultarUsuario(_ sender: Any) {
//Aqui va todo el codigo para consultar los registros de la base de datos
let nombreKey: String = (nombreConsultado.text?.trimmingCharacters(in: .whitespacesAndNewlines))!
if(nombreKey.isEmpty){
print("El nombre para consultar esta vacio")
return;
}
print(nombreKey)
var stmt: OpaquePointer?
//Codigo experimental para consultar informacion en mi base de datos
if sqlite3_prepare(db, "SELECT id, nombre, apellido FROM Gear", -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db))
print("Error preparando el SELECT: \(errmsg)")
}
//Recorremos los registros para encontrar el que buscamos
while sqlite3_step(stmt) == SQLITE_ROW{
let id = sqlite3_column_int64(stmt, 0)
print("id = \(id);", terminator: "")
if let nombre = sqlite3_column_text(stmt, 1){
let nombreString = String(cString: nombre)
print("Nombre = \(nombreString)")
}else{
print("Nombre no encontrado")
}
if let apellido = sqlite3_column_text(stmt, 2){
let apellidoString = String(cString: apellido)
print("Apellido = \(apellidoString)")
}else{
print("Apellido no encontrado")
}
}
if sqlite3_finalize(stmt) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db))
print("Error al finalizar el stmt preparado: \(errmsg)")
}
stmt = nil
if sqlite3_close(db) != SQLITE_OK{
print("Error closing database")
}
db = nil
}