gpt4 book ai didi

android - 如何使用android找出用户存在于Sqlite数据库中?

转载 作者:行者123 更新时间:2023-11-29 14:29:33 24 4
gpt4 key购买 nike

我正在开发一个用于培训的登录/注册应用程序,因为我是一名初学者,一切正常,除了一个小问题,但我不知道如何解决,我尝试搜索但找不到任何东西这是我的 database.kt 的一部分

   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 }

主要 Activity .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
}

占位符 ? 将从作为 rawQuery() 的第二个参数传递的数组的相应项中获取它们的值,您不需要连接单个报价,让您避免 sql injection 的风险.
在那之后和返回语句之前,您必须关闭 Cursordb 对象。

关于android - 如何使用android找出用户存在于Sqlite数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com