慕工程0101907
2021-12-30 20:25:51
我的問題最近,我通過 android studio 運行了我的一些 Java 代碼 [Open Helper],它給出了以下錯誤: 我有一個帶有 android(java 代碼)的登錄頁面,當時間必須是密碼時,我的問題只是字符串,將是真的。但如果是輸入數字密碼,就不對了。 代碼 SqlOpenHelperpackage com.example.root.sql2;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.support.annotation.Nullable;public class db extends SQLiteOpenHelper { public db(Context context) { super(context, "login.db", null, 1); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("CREATE TABLE USER(ID INTEGER PRIMARY KEY AUTOINCREMENT ,NAME TEXT, PASSWORD TEXT)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("DROP TABLE IF EXISTS USER"); onCreate(sqLiteDatabase); } public boolean insert (String name , String password){ SQLiteDatabase db = getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("NAME", name); contentValues.put("PASSWORD", password); long ins = db.insert("USER","",contentValues); if (ins == -1) return false; else return true; } public boolean login(String name , String password){ SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM USER WHERE NAME=? AND PASSWORD=?", new String[] {name , password}); cursor.moveToFirst(); if (cursor.getCount()>0) return false; else return true; }}“密碼”如果是字符串,則密碼為真,但“密碼”如果是字符串,則密碼(數字)則不為真... *
1 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
我相信你的主要問題是你的邏輯顛倒了。
你基本上是說使用if (cursor.getCount()>0) return false;; 如果搜索用戶找到該用戶,則返回 false。
我相信你想要 if (cursor.getCount()>0) return true;
然而,盡管這不是問題,但使用moveToFirst并沒有增加任何用處。此外,您可能會遇到問題,因為您沒有關閉光標。
我建議你也許使用:-
public boolean login(String name , String password){
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM USER WHERE NAME=? AND PASSWORD=?", new String[] {name , password});
int count = cursor.getCount();
cursor.close();
return count > 0;
}
這將獲取計數,關閉游標,然后如果計數大于 0(找到用戶密碼組合)則返回 true,否則返回 false;
添加回答
舉報
0/150
提交
取消