使用数据库的登录系统
问题描述:
我想使用SQLLIte创建简单的登录系统我已经创建了数据库,但是在光标中出现错误。使用数据库的登录系统
我的数据库代码是
public static final String KEY_RAWID = "_id";
public static final String KEY_RAWNAME = "name";
public static final String KEY_PASSWORD = "password";
public static final String KEY_EMAIL = "email";
private static final String DATABASE_NAME = "users_DB";
private static final String DATABASE_TABLE = "users";
private dbusers ourhelper;
private final Context ourcontext;
private SQLiteDatabase ourDatabase;
private static class dbusers extends SQLiteOpenHelper {
public dbusers(Context context) {
super(context, DATABASE_TABLE, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" + KEY_RAWID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_RAWNAME
+ " TEXT NOT NULL, " + KEY_PASSWORD + " TEXT NOT NULL, "
+ KEY_EMAIL + " TEXT NOT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE);
onCreate(db);
}
}
public Dbinfo(Context c) {
ourcontext = c;
}
public Dbinfo open() {
ourhelper = new dbusers(ourcontext);
ourDatabase = ourhelper.getWritableDatabase();
return this;
}
public void close() {
ourhelper.close();
}
我在这个函数中遇到错误
public Boolean check(String nameS, String passwordS) {
// TODO Auto-generated method stub
String[] columns = new String[] { KEY_RAWID, KEY_RAWNAME, KEY_PASSWORD,
KEY_EMAIL };
Cursor c = null;
Boolean check = true;
c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name="+nameS,null);
if (c.getCount() > 0)// && c2.getCount() > 0) {
{ check = false;
return check;
}
return check;
错误:
04-15 00:29:23.302: E/AndroidRuntime(1300): android.database.sqlite.SQLiteException: no such column: khaled: , while compiling: SELECT name,password FROM users WHERE name=khaled
在数据库中。虽然我已经加入数据,我已经检查数据库中的数据已成功添加。任何帮助?
答
这条线从改变:
c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name="+nameS,null);
到
c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name='"+nameS+"'",null);
答
名称必须用引号括起来:需要
c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name='"+nameS+"'",null);
答
推荐的方法是这样的:
c = ourDatabase.rawQuery("SELECT name, password FROM users WHERE name = ?",
new String[]{nameS});
你需要确保你生成的sql是有效的。目前没有关于nameS值的报价。它应该是... name ='“+ nameS +”'“ – Mufaka 2012-04-14 22:55:06
甚至更好'rawQuery(”... WHERE name =?“,new String [] {nameS});'做''”+ nameS +“' '如果nameS包含'''将会失败 – zapl 2012-04-14 22:59:38