2012-10-01 36 views
3

我從某處複製了一個使用sqlite的示例。他們定義了5列,我將其更改爲4列。 相關部分是在這裏:android和sqlite有5列但提供了4個值

private final String DB_NAME = "mcustomerDbName"; 
    private final String TABLE_NAME = "mcustomeTableName"; 
    SQLiteDatabase customersDB = null; 
    /** Called when the activity is first created. */ 


    .......................................... 

這是表4列的上下文中

private void mFillDbsTable(){ 
     try { 

      customersDB.execSQL("INSERT INTO " + 
        TABLE_NAME + 
        " Values ('ABARTH','500','Abarth','15.3846153846154');"); 
      customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ('ABARTH ', 'Grande Punto ', '1.4 T-Jet 155 ', '14.9253731343284 ');"); 
      customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ('ALFA ROMEO ', 'MiTo ', '1.4 16v TB 120 ', '16.3934426229508 ');"); 
      customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ('ALFA ROMEO ', 'MiTo ', '1.3 JTDm 90 ', '22.2222222222222 ');"); 
      customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ('ALFA ROMEO ', '147 ', '1.6 (120 bhp) ', '12.1951219512195 ');"); 
      customersDB.execSQL("INSERT INTO " + TABLE_NAME + "Values ('ALFA ROMEO ', '147 ', '2.0 ', '11.2359550561798 ');"); 

    .......................................... 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    /*setContentView(R.layout.activity_delek);**/ 
    ArrayList<String> results = new ArrayList<String>(); 
     try { 
      customersDB = this.openOrCreateDatabase( DB_NAME, MODE_PRIVATE, null); 
      customersDB.execSQL("CREATE TABLE IF NOT EXISTS " + 
        TABLE_NAME + 
        " (Name VARCHAR," + 
        " Street VARCHAR, Block VARCHAR, City VARCHAR);"); 
      mFillDbsTable(); 
      Cursor c = customersDB.rawQuery("SELECT Name, Street, Block, City FROM " + 
        TABLE_NAME + 
         " where Name == 'TOYOTA' or Name == 'Yosi' ", null); 
      if (c != null) { 
       if (c.moveToFirst()) { 
        do { 
         String name = c.getString(c.getColumnIndex("Name")); 
          String street = c.getString(c.getColumnIndex("Street")); 

           String city = c.getString(c.getColumnIndex("City")); 

          results.add(name + ", " + street + " "+ city); 
        }while (c.moveToNext()); 
       } 
      } 
      setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results)); 
     } catch (SQLiteException se) { 
      Log.e(getClass().getSimpleName(), "create/Open the database problem"); 
     } finally { 
      if (customersDB != null) 
       customersDB.execSQL("DELETE FROM " + TABLE_NAME); 
       customersDB.close(); 
     } 

我得到的日誌中這樣的信息:

10-01 21:59:59.434: I/Database(1067): sqlite returned: error code = 1, msg = table   mcustomeTableName has 5 columns but 4 values were supplied. 

爲什麼??我有4列

+2

如果您在編輯之前運行該程序,您必須卸載應用程序(或刪除表),因爲你如果在創建表不存在。 –

回答

5

該表可能已經存在從前一次運行沒有你的改變s並且在數據庫中仍然有5列(CREATE TABLE IF NOT EXISTS)。您可以通過從ADP登錄到sqllite來驗證此情況。在您運行應用程序之前,請先刪除表格。

此外,還要爲您的插入語句提供列列表。不管這是很好的做法,因爲你的一個應用將更爲強勁對架構更改:

"INSERT INTO " + TABLE_NAME + " (Name, Street, Block, City) Values (" ...etc 
+0

謝謝!我在哪裏可以找到桌子?我沒有找到它... – user1462787

+0

請按照這些說明http://developer.android.com/tools/help/adb.html#sqlite – cdonner

相關問題