我正在使用登录/注册应用程序进行培训,因为我是一个初学者,除了一个小问题之外,其他所有功能都可以正常工作,但是我不知道如何解决它,我尝试了搜索,但是在这里找不到任何内容我的数据库
fun userPresent (user: String,pass: String):Boolean { val db = writableDatabase val query = "select * from $TABLE_NAME where username = $user and password = $pass" val cursor = db.rawQuery(query,null) if (cursor.count <= 0) { cursor.close() return false } cursor.close() return true }
mainactivity.kt
if (database.userPresent(user = username,pass = password)) { intent.putExtra("text", "Welcome , $username $password") startActivity(intent) Toast.makeText(this,"Logged In Successfully",Toast.LENGTH_SHORT).show() } else { Toast.makeText(this,"Wrong Username/Password",Toast.LENGTH_SHORT).show() }
我的logCat错误
android.database.sqlite.SQLiteException: no such column: ss (code 1 SQLITE_ERROR): , while compiling: select * from user_table where username = ss and password = ss at com.example.myapplication.DatabaseHelper.userPresent(DatabaseHelper.kt:52) at com.example.myapplication.MainActivity$onCreate$1.onClick(MainActivity.kt:49)
我也不确定为什么必须关闭光标。先感谢您
代码的问题不在于您将参数传递为Integer(不是),而是因为参数TEXT
没有用单引号引起来,所以不能将它们识别为文字,因此SQLite认为它们是列名。
将参数传递给的推荐方法rawQuery()
是:
fun userPresent (user: String, pass: String): Boolean { val db = writableDatabase val query = "select * from $TABLE_NAME where username = ? and password = ?" val cursor = db.rawQuery(query, arrayOf(user, pass)) val result = cursor.count > 0 cursor.close() db.close() return result }
占位符?
将从作为第2个参数传递的数组的相应项目中获取其值,rawQuery()
并且您无需连接单引号,从而避免了sql注入的风险。
之后,在return语句之前,您必须同时关闭Cursor
和db
对象。