Ошибка входа в систему, но после многих попыток просмотр переходит в другое представление - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь создать функциональность входа в систему для моего приложения, используя 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)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...