nic*_*sra 1 sqlite android kotlin android-sqlite android-database
我正在使用登录/注册应用程序进行培训,因为我是一个初学者,除了一个小问题之外,其他所有功能都可以正常工作,但是我不知道如何解决它,我尝试了搜索,但是在这里找不到任何内容我的数据库
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 }
Run Code Online (Sandbox Code Playgroud)
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()
}
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)
我也不确定为什么必须关闭光标。先感谢您
代码的问题不在于您将参数传递为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
}
Run Code Online (Sandbox Code Playgroud)
占位符?将从作为第2个参数传递的数组的相应项目中获取其值,rawQuery()并且您无需连接单引号,从而避免了sql注入的风险。
之后,在return语句之前,您必须同时关闭Cursor和db对象。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |