2015-05-06 48 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); 

这将显示查询,你可以检查在什么地方你做这个错误。