*
最近,我通过android studio运行了一些Java代码[Open Helper],它给出了以下错误: 我有一个带有android(java代码)的登录页面,只是我的问题,当必须将密码作为字符串放置的时间时,这将是正确的。但是如果输入了数字密码,则不会正确。 代码SqlOpenHelper
package 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;
}
}
“ password”如果为字符串,则密码为true,但是“ password”如果为字符串,密码(数值)则为true。 *
答案 0 :(得分:0)
我相信您的主要问题是您的逻辑是相反的。
您基本上是在说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;
}