Android SQLite数据库插入第二张表时报错:date列不存在
Android SQLite插入数据报错:表不存在date列
问题描述
在Android开发中使用SQLite数据库,创建了bosors和t67675656072510693两张表。bosors表操作正常,但向t67675656072510693表插入数据时抛出错误:
(1) table t67675656072510693 has no column named date in "INSERT INTO t67675656072510693(date) VALUES (?)"
已在DatabaseHelper中为该表定义date列,尝试过单独使用DatabaseHelper和DatabaseManager,问题仍未解决。
相关代码
DatabaseHelper代码
public class DatabaseHelper extends SQLiteOpenHelper { public static final String TABLE_NAME = "bosors"; public static final String _ID = "_id"; public static final String index = "nindex"; public static final String DATE = "date"; static final String DB_NAME = "brs.DB"; static final int DB_VERSION = 1; private static final String CREATE_TABLE = "create table " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + index + " TEXT NOT NULL);"; private static final String CREATE_TABLE2 = "create table " + "t67675656072510693" + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + DATE + " TEXT NOT NULL);"; @Override public void onCreate(SQLiteDatabase p1) { p1.execSQL(CREATE_TABLE); p1.execSQL(CREATE_TABLE2); } @Override public void onUpgrade(SQLiteDatabase p1, int p2, int p3) { p1.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); p1.execSQL("DROP TABLE IF EXISTS " + "t67675656072510693"); onCreate(p1); } public DatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } }
插入方法代码
public void insert(String data) { ContentValues contentValue = new ContentValues(); contentValue.put(DatabaseHelper.index, data); database.insert(DatabaseHelper.TABLE_NAME, null, contentValue); }
调用插入的逻辑
if(token[i].equals(nmdName.toString())){ dbm.insertH("t"+nmdIndex,date); }
解决方案
1. 升级数据库版本,触发表结构更新
当前DB_VERSION为1,若之前已创建过数据库,新增的t67675656072510693表结构不会自动生效。修改DB_VERSION为2,让onUpgrade方法执行,删除旧表并重新创建:
static final int DB_VERSION = 2;
2. 检查insertH方法实现
你提供的insert方法是针对bosors表的,而调用的是insertH,需确保insertH正确操作目标表和列:
public void insertH(String tableName, String date) { ContentValues contentValues = new ContentValues(); // 使用DatabaseHelper.DATE确保列名一致 contentValues.put(DatabaseHelper.DATE, date); database.insert(tableName, null, contentValues); }
3. 确认表名完全匹配
检查nmdIndex的值是否确实为67675656072510693,确保调用时生成的表名"t"+nmdIndex与创建的t67675656072510693完全一致。
4. 卸载APP重新安装(快速验证)
如果不想修改版本号,可直接卸载APP后重新安装,这样会重新执行onCreate方法,创建最新的表结构。
内容的提问来源于stack exchange,提问作者rani
相关产品推荐
相关产品推荐

