2015-05-06 66 views
-3

我無法將記錄插入到我的應用程序本地數據庫。我從Web服務獲取數據,並試圖將它們存儲在我的應用程序本地sqlite數據庫中,但我沒有得到這樣的表錯誤。 這是我用於創建表格&的DatabaseHelper類的代碼。插入sqlite數據庫時不存在此列存在錯誤

private static final String CREATE_MERCHANT_DETAILS = "CREATE TABLE " + TABLE_MERCHANT_DETAILS + 
    " (" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    KEY_NAME + " TEXT, " 
    + KEY_LOGO + "TEXT, " 
    + KEY_BACKGROUND + "TEXT, " 
    + KEY_PRODUCT + "TEXT, " 
    + KEY_PRODUCT_ID + "TEXT, " 
    + KEY_TYPE + "TEXT, " 
    + KEY_DENOMINATION + "TEXT);"; 


public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.context = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_MERCHANT_DETAILS); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    } 

    public void insertAMerchant(String name, String logo, String background, String product, String productId, String type, String denomination) { 
     database = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(KEY_NAME, name); 
     contentValues.put(KEY_LOGO, logo); 
     contentValues.put(KEY_BACKGROUND, background); 
     contentValues.put(KEY_PRODUCT, product); 
     contentValues.put(KEY_PRODUCT_ID, productId); 
     contentValues.put(KEY_TYPE, type); 
     contentValues.put(KEY_DENOMINATION, denomination); 
     database.insert(TABLE_MERCHANT_DETAILS, null, contentValues); 
    } 
+0

CREATE_MERCHANT_DETAILS,code? – Skynet

+0

private static final String CREATE_MERCHANT_DETAILS =「CREATE TABLE」+ TABLE_MERCHANT_DETAILS +「(」+ KEY_ID +「INTEGER PRIMARY KEY AUTOINCREMENT,」+ KEY_NAME +「TEXT」+ KEY_LOGO +「TEXT」+ KEY_BACKGROUND +「TEXT」+ KEY_PRODUCT +「TEXT」+ KEY_PRODUCT_ID +「TEXT」+ KEY_TYPE +「TEXT」+ KEY_DENOMINATION +「TEXT」;「; –

+0

檢出:http://www.tutorialspoint.com/android/android_sqlite_database.htm –

回答

2

CREATE TABLE SQL列名和類型之間添加空格。

卸載您的應用程序,以便舊數據庫文件被刪除,並且您的onCreate()再次運行。

+0

你的詭計一次適用於我,但現在當我再次運行我的應用程序而沒有卸載時,它再次存儲相同的數據庫記錄並再次從Web服務中獲取。如何解決這個問題? –

+1

不要再次寫入相同的記錄,或將'UNIQUE'約束添加到應具有唯一值的列。 – laalto

+0

我曾嘗試給KEY_NAME列添加唯一約束,但每次運行應用程序時都會插入相同的記錄。 –

0

你的問題的標題說,插入SQLite數據庫

,並在你的問題你說的時候

不存在這樣的列錯誤,

沒有這種表錯誤。

如果錯誤是No such column exists,問題可能是因爲

  1. 列名之間的間距和類型
  2. 如果你已經改變了你的表模式,那麼你需要增加你的DATABASE_VERSION以反映變化。但是,您需要執行並設置onUpgrade才能這樣做。我在這裏添加了代碼。

您需要設置onUpgrade以反映新的更改。你可以做的,

@Override 
    public void onUpgrade(SQLiteDatabase db, int i, int i2) { 

     Toast.makeText(context, "on Upgrade is called", Toast.LENGTH_LONG).show(); 

     db.execSQL("DROP TABLE IF EXISTS " + TABLE_MERCHANT_DETAILS); 
     onCreate(db); 
    } 

要檢查你的SQL查詢是否是有效的/不,打印查詢在 DatabaseHelper.

System.out.println(CREATE_MERCHANT_DETAILS); 

這將顯示查詢,你可以檢查在什麼地方你做這個錯誤。