Android 插入sqlite数据库时不存在此类列错误

Android 插入sqlite数据库时不存在此类列错误,android,sqlite,insert,Android,Sqlite,Insert,我在将记录插入应用程序本地数据库时遇到问题。我从web服务获取数据,并试图将它们存储在我的应用程序本地sqlite数据库中,但没有收到这样的表错误。 这是我的DatabaseHelper类的代码,我正在使用它来创建和插入表 private static final String CREATE_MERCHANT_DETAILS = "CREATE TABLE " + TABLE_MERCHANT_DETAILS + " (" + KEY_ID + " INTEGER PRIMARY KE

我在将记录插入应用程序本地数据库时遇到问题。我从web服务获取数据,并试图将它们存储在我的应用程序本地sqlite数据库中,但没有收到这样的表错误。 这是我的DatabaseHelper类的代码,我正在使用它来创建和插入表

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);
    }

CREATE TABLE
SQL中的列名和类型之间添加空格


卸载你的应用程序,以便删除旧的数据库文件,并再次运行你的
onCreate()

你的问题标题是

插入sqlite数据库时不存在此类列错误

在你的问题中,你是说

没有这样的表错误

如果错误为
不存在此类列
,则问题可能是由于

  • 列名和类型之间的间距
  • 如果更改了表架构,则需要增加数据库版本,以反映更改。但是,您需要实现并设置
    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);
    

    这将显示查询,您可以检查错误的确切位置。

    CREATE_MERCHANT_DETAILS,code?私有静态最终字符串CREATE_MERCHANT_DETAILS=“CREATE TABLE”+TABLE_MERCHANT_DETAILS+”(“+KEY_ID+”整数主键自动递增“+KEY_NAME+”文本“+KEY_徽标+”文本“+KEY_背景+”文本,”+KEY_PRODUCT+“文本”、+KEY_PRODUCT_ID+“文本”、+KEY_TYPE+“文本”、+KEY_命名+“文本”);检查:你的技巧立刻对我有效,但现在当我再次运行我的应用程序而不卸载时,它会再次存储相同的数据库记录&再次从web服务获取。如何克服此问题?不要再次写入相同的记录,也不要向应具有唯一值的列添加
    UNIQUE
    约束。更改架构后,您需要通过卸载应用程序等方式重新创建表。而不是每次更改架构时都卸载应用程序,您可以增加DB版本并实现
    onUpgrade
    。我已经在答案中添加了如何操作的代码。请看。谢谢你@laalto u帮了我很多忙。我认为你是个乐于助人的人。