2012-04-14 101 views
0

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

回答

0

這條線從改變:

c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name="+nameS,null); 

c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name='"+nameS+"'",null); 
0

名稱必須用引號括起來:需要

c=ourDatabase.rawQuery("SELECT name,password FROM users WHERE name='"+nameS+"'",null); 
0

推薦的方法是這樣的:

c = ourDatabase.rawQuery("SELECT name, password FROM users WHERE name = ?", 
    new String[]{nameS});