Android 插入sqlite数据库时不存在此类列错误
我在将记录插入应用程序本地数据库时遇到问题。我从web服务获取数据,并试图将它们存储在我的应用程序本地sqlite数据库中,但没有收到这样的表错误。 这是我的DatabaseHelper类的代码,我正在使用它来创建和插入表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
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帮了我很多忙。我认为你是个乐于助人的人。