You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:49:58