2014-02-27 72 views
0

我在一個應用程序上工作並且創建了一個數據庫,但是當我輸入數據時,logcat發出一個錯誤,提示「列密碼不存在」。爲什麼是這樣?爲什麼它說列不存在爲android sqlite數據庫?

這裏是我的數據庫代碼(一部分):

public class DBHandler extends SQLiteOpenHelper { 

    private static final int DATABASE_NUMBER = 1; 

    private static final String DATABASE_NAME = "Snipeshot"; 

    private static final String TABLE_USERS = "users"; 

    private static final String KEY_USERNAME ="username "; 
    private static final String KEY_PASSWORD = "password "; 

    public DBHandler(Context ctx){ 
     super(ctx, DATABASE_NAME, null, DATABASE_NUMBER); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     String CREATE_USER_TABLE = "CREATE TABLE " + DATABASE_NAME + "(" + KEY_USERNAME + "TEXT, " + KEY_PASSWORD 
       + "TEXT" + ");"; 
     db.execSQL(CREATE_USER_TABLE); 
    } 

這裏是輸入數據到數據庫的代碼:私有類寄存器擴展

AsyncTask<Object,Void,Boolean>{ 
     String f,l,d,em,un,pw,cpw; 
     boolean success = true; 
     protected void onPreExecute(){ 
      f = fn.getText().toString(); 
      l = ln.getText().toString(); 
      d = dob.getText().toString(); 
      em = e.getText().toString(); 
      un = u.getText().toString(); 
      pw = p.getText().toString(); 
      cpw = cp.getText().toString(); 
     } 

     @Override 
     protected Boolean doInBackground(Object... arg0) { 
      // TODO Auto-generated method stub 
      if(f == null || f.equalsIgnoreCase("") ){ 
       success = false; 
       return false; 
      } 

      else if(l == null || l.equalsIgnoreCase("")){ 
       success = false; 
       return false; 
      } 

      else if(d == null || d.equalsIgnoreCase("")) 
      { 
       success = false; 
       return false; 
      } 

      else if(em == null || em.equalsIgnoreCase("")){ 
       success = false; 
       return false; 
      } 

      else if(un == null || un.equalsIgnoreCase("")){ 
       success = false; 
       return false; 
      } 

      else if(pw == null || pw.equalsIgnoreCase("")){ 
       success = false; 
       return false; 
      } 

      else if(!(cpw.equals(pw))){ 
       success = false; 
       return false; 
      } 

      if(success){ 
       db.addUSer(new User(un,pw)); 
      } 

      return true; 
     } 


     protected void onPostExecute(Boolean results){ 
      results = true; 
      ctx.startActivity(new Intent(ctx,SignIn.class)); 




     } 

這裏是addUSer code:

public void addUSer(User user) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_USERNAME, user.getuserName()); // 
     values.put(KEY_PASSWORD, user.getPassword()); // 

     // Inserting Row 
     db.insert(TABLE_USERS, null, values); 
     db.close(); // Closing database connection 
    } 
+2

也許是因爲你的密碼欄被命名爲「密碼」,而不是「密碼」? – panini

+0

同意@panini,更好的檢查'db.addUSer'。 –

+0

重要的是列名後面有空格嗎? KEY_USERNAME =「用戶名」; – cbrulak

回答

0

有缺失的空間:

你必須寫 「TEXT」 +

,而不是

「TEXT」 +

+0

雖然用戶和密碼後有一個空格。我還應該放? – shreyashirday

+0

我不知道這是寫入變量的空間的正確方法,我總是將它們寫入「text」前後的查詢中。但是,如果這是問題,你可以在logcat中看到它(在transleated查詢中是將兩個單詞寫在一起,如果是,那就是問題)輸出。另一個原因可能是,在安裝apk之後添加密碼,並且db版本沒有增加。如果這是問題,則必須卸載該應用程序並重新安裝,或者增加數據庫編號。 – user3057944

0

你知道,你在呼喚的database name代替table name

private static final String TABLE_USERS = "users"; 

private static final String KEY_USERNAME ="username "; 
private static final String KEY_PASSWORD = "password "; 

public DBHandler(Context ctx){ 
    super(ctx, DATABASE_NAME, null, DATABASE_NUMBER); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 


//SHouldn't here TABLE NAME COME 
    String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USERS + "(" + KEY_USERNAME + "TEXT, " + KEY_PASSWORD 
      + "TEXT" + ");"; 
1

從上面的代碼,這些是你需要糾正的錯誤:

1 - > Your Strin摹變量包含尾隨空格,

private static final String KEY_USERNAME ="username "; 
private static final String KEY_PASSWORD = "password "; 

更正它:

private static final String KEY_USERNAME = "username"; 
private static final String KEY_PASSWORD = "password"; 

2 - >你應該有一個id柱,使用它可以唯一地標識每個記錄。此外,您還寫了DATABASE_NAME而不是TABLE_USERS,並對查詢字符串中的間距進行了一些更正。

字符串CREATE_USER_TABLE = 「CREATE TABLE」 + DATABASE_NAME + 「(」 + KEY_USERNAME + 「TEXT」 + KEY_PASSWORD + 「TEXT」 + 「);」;

更正它:

創建一個類變量,

private static final String KEY_USERID = "uid"; 

而且,

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USERS + "(" + KEY_USERID + " integer primary key autoincrement, " + KEY_USERNAME + " TEXT, " + KEY_PASSWORD 
      + " TEXT" + ");"; 
    db.execSQL(CREATE_USER_TABLE); 
} 

不知道這是否將是有益的,但櫃面它,只是讓我知道。

相關問題