Я пытаюсь создать функциональность входа в систему для моего приложения, используя SQLite в качестве базы данных. Я использую правильное имя пользователя и пароль, но продолжаю получать сообщение об ошибке от SQLite о том, что произошла неизвестная ошибка. После многочисленных попыток повторного нажатия кнопки входа в систему я могу обойти экран входа в систему.
Вот моя функциональность кнопки входа в систему
var db: OpaquePointer?
@IBOutlet weak var labelMessage: UILabel!
//the defaultvalues to store user data
let defaultValues = UserDefaults.standard
@IBOutlet weak var username: UITextField!
@IBOutlet weak var password: UITextField!
@IBAction func Login(_ sender: UIButton) {
//creating a statement
var stmt: OpaquePointer?
//the insert query
let queryString = "SELECT * FROM Employee WHERE username = ? AND password = ? "
//preparing the query
if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}
//binding the parameters
if sqlite3_bind_text(stmt, 1, username.text!, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
if sqlite3_bind_text(stmt, 2, password.text!, -1, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure binding name: \(errmsg)")
return
}
//executing the query
if sqlite3_step(stmt) == SQLITE_ROW {
let TableView = self.storyboard?.instantiateViewController(withIdentifier: "TableView") as! TableView
self.navigationController?.pushViewController(TableView, animated: true)
self.dismiss(animated: false, completion: nil)
} else {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("Login Failed: \(errmsg)")
self.labelMessage.text = "Invalid username or password"
return
}
}
Настройка БД в viewcontroller
override func viewDidLoad() {
super.viewDidLoad()
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("sDB.sqlite")
if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
print("error opening database")
}
if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Employee (id INTEGER PRIMARY KEY, username TEXT, f_name TEXT, l_name TEXT, password TEXT)", nil, nil, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error creating table: \(errmsg)")
}
}