2015-10-12 21 views
1

我用PHP腳本填充我的SQLiteDatabase的登錄憑據和帳戶信息。即使登錄工作正常,SQLite在列中的性別名稱有錯誤,我不知道我錯過了什麼。有人可以爲我指出嗎? Cu'z我和我的朋友找不到它,並且都是Android Development的新手。表名沒有名稱的Android SQLite的列PHP

以下是錯誤

>  E/SQLiteDatabase﹕ Error inserting [email protected] bday=24242 email=Male address=asdasd mobile=1995-03-03 
> full_name=Arnold 
>   android.database.sqlite.SQLiteException: table accounts has no column named gender (code 1): , while compiling: INSERT INTO 
> accounts(gender,bday,email,address,mobile,full_name) VALUES 
> (?,?,?,?,?,?) 

SQLiteHelper

private static final int DATABASE_VERSION = 1; 
     // Database Name 
     private static final String DATABASE_NAME = "brm_dbs"; 
     // Login table name 
     private static final String TABLE_LOGIN = "accounts"; 
     // Login Table Columns names 
     private static final String KEY_ID = "id"; 
     private static final String KEY_NAME = "full_name"; 
     private static final String KEY_ADDRESS = "address"; 
     private static final String KEY_MOBILE = "mobile"; 
     private static final String KEY_EMAIL = "email"; 
     private static final String KEY_UID = "uid"; 
     private static final String KEY_CREATED_AT = "created_at"; 
     private static final String KEY_BDAY = "bday"; 
     private static final String KEY_GENDER = "gender"; 

     public SQLiteHandler(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 
     // Creating Tables 
     @Override 
     public void onCreate(SQLiteDatabase db) { 
      String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "(" 
        + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
        + KEY_ADDRESS + " TEXT," + KEY_MOBILE + " INTEGER," 
        + KEY_EMAIL + " TEXT UNIQUE," + KEY_UID + " TEXT," 
        + KEY_CREATED_AT + " TEXT," + KEY_BDAY + " TEXT," 
        + KEY_GENDER + " TEXT" + ");"; 
      db.execSQL(CREATE_LOGIN_TABLE); 

      Log.d(TAG, "Database tables created"); 
     } 

public void getloginUser(String full_name, String address, 
          String bday, String gender, 
          String mobile, String email) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     //values.put(KEY_UNIQUE_ID, unique_id); 
     values.put(KEY_NAME, full_name); // Name 
     values.put(KEY_ADDRESS, address); // address 
     values.put(KEY_BDAY, bday); // BDAY 
     values.put(KEY_GENDER, gender); // GENDER 
     values.put(KEY_MOBILE, mobile); // mobile 
     values.put(KEY_EMAIL, email); // Email 


     // Inserting Row 
     long id = db.insert(TABLE_LOGIN, null, values); 
     db.close(); // Closing database connection 
     Log.d(TAG, "New user inserted into sqlite: " + id); 
    } 

插入通過登錄憑據的SQLite

try { 
        JSONObject jObj = new JSONObject(response); 
        boolean error = jObj.getBoolean("error"); 
        // Check for error node in json 
        if (!error) { 
         // user successfully logged in 
         // Create login session 
         session.setLogin(true); 
         JSONObject user = jObj.getJSONObject("user"); 
         String full_name = user.getString("full_name"); 
         String address = user.getString("address"); 
         String mobile = user.getString("mobile"); 
         String email = user.getString("email"); 
         String bday = user.getString("bday"); 
         String gender = user.getString("gender"); 
         // Inserting row in users table 
         db.getloginUser(full_name, address, mobile, email, bday, gender); 
         // Launch main activity 

         // Launch main activity 
         Intent intent = new Intent(Loign.this, 
           MainActivity.class); 
         startActivity(intent); 
         finish(); 

        } else { 
         // Error in login. Get the error message 
         String errorMsg = jObj.getString("error_msg"); 
         Toast.makeText(getApplicationContext(), 
           errorMsg, Toast.LENGTH_LONG).show(); 
        } 
       } catch (JSONException e) { 
        // JSON error 
        e.printStackTrace(); 
       } 
+1

編輯:沒關係,只是意識到你所有的數據是混合的。 – hypd09

+0

謝謝,但仍然得到錯誤列 –

+1

私人靜態最終詮釋DATABASE_VERSION = 2;並重新構建應用程序 – Abx

回答

1

打開DDMS並刪除應用程序數據,或者擦除模擬器並運行你的應用程序,它會工作正常。該表已經存在,沒有性別列,當你正在運行的應用程序,因爲數據庫退出,那麼它不會調用SQLiteOpenHelper的onCreate方法,所以在數據庫之後你做了什麼改變,它可能不會影響表的結構。

解決方案:

  1. 卸載從模擬器的應用程序,並嘗試從Android工作室運行應用程序,

  2. 給這個差異DB版本說2或先前的DB版本+ 1 。然後onUpgrade()方法將調用編寫代碼來更改現有表的結構,或者添加您想要的任何表或根據您的要求刪除表。

1

值應該被插入,表的創建順序爲:

+0

這是不正確的。 –

+0

檢查你創建的表格天氣與所需的列r創建的表 –

相關問題