使用数据库的登录系统

使用数据库的登录系统

问题描述:

我想使用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 

在数据库中。虽然我已经加入数据,我已经检查数据库中的数据已成功添加。任何帮助?

+0

你需要确保你生成的sql是有效的。目前没有关于nameS值的报价。它应该是... name ='“+ nameS +”'“ – Mufaka 2012-04-14 22:55:06

+0

甚至更​​好'rawQuery(”... WHERE name =?“,new String [] {nameS});'做''”+ nameS +“' '如果nameS包含'''将会失败 – zapl 2012-04-14 22:59:38

这条线从改变:

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});