添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
失恋的青椒  ·  20.5 OpenSSL ...·  7 月前    · 
酷酷的红金鱼  ·  vue移动端缩放-掘金·  1 年前    · 
想发财的野马  ·  Qt 中 QListWidget ...·  1 年前    · 

挣扎着连接我的SQLite数据库android studio,表没有列可以插入

0 人关注

我正在尝试设置我的 SQLite 数据库,但我收到了一些错误,我发现很难纠正。 See the error log here

这是一张被抛出的错误的图片,这是我的DatabaseHelper的代码设置。

我在日志中还收到一些其他错误,我不确定它们与什么有关--任何信息都很重要。 在这里看到logcat输出

反正错误的代码

  E/SQLiteLog: (1) table my_manager has no column named 
    location_description in "INSERT INTO my_manager(location_name,location_county,location_description) 
    VALUES (?,?,?)"
     2020-11-28 19:56:32.986 5665-5665/? E/SQLiteDatabase: Error inserting location_name=Blarney Stone 
     location_county=Cork location_description=Stone in  big wall
     android.database.sqlite.SQLiteException: table my_manager has no column named location_description 
     (code 1 SQLITE_ERROR): , while compiling: INSERT INTO 
     my_manager(location_name,location_county,location_description) VALUES (?,?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
        a....

这里是我的源代码。

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private Context context;
    private static final String DATABASE_NAME = "my_manager.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME =  "my_manager";
    private static final String COLUMN_ID = "location_id";
    private static final String COLUMN_LOCATION = "location_name";
    private static final String COLUMN_COUNTY = "location_county";
    private static final String COLUMN_DESCRIPTION = "location_description";
    public MyDatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.context = context;
    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE " + TABLE_NAME +
                        " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        COLUMN_LOCATION + " TEXT, " +
                        COLUMN_COUNTY + " TEXT, " +
                        COLUMN_DESCRIPTION + " TEXT );";
        db.execSQL(query);
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    void addLocation(String location, String county, String description){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_LOCATION, location);
        cv.put(COLUMN_COUNTY, county);
        cv.put(COLUMN_DESCRIPTION, description);
        long result = db.insert(TABLE_NAME, null, cv);
        if (result == -1){
            Toast.makeText(context, "Failed!" , Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(context, "Added Successfully" , Toast.LENGTH_SHORT).show();
    Cursor readAllData(){
        String query = "SELECT * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = null;
        if(db != null){
            cursor = db.rawQuery(query, null);
        return cursor;
    
4 个评论
看起来很好--你有没有可能添加了描述栏但没有提升版本? 如果有疑问,要么重新安装应用程序,要么提升版本(假设你可以接受丢失数据--这真的是你想要的升级吗)。
谢谢,没有数据丢失......我怎样才能提高版本/重新安装应用程序?
DATABASE_VERSION 设置为2--这就是触发 onUpgrade 被调用的原因。 重新安装应用程序只是意味着从模拟器或设备上卸载,然后使用你目前使用的任何方式重新安装。
所以我记得我的gradel模块捆绑的一些代码,并进行了应用程序的重新安装和冷启动后,工作的魅力,谢谢你!"。你能不能解释一下当时的问题,让我从中得到启发?再次感谢您!
java
android
mysql
sqlite
Brian O'Donoghue
Brian O'Donoghue
发布于 2020-11-29
1 个回答
user2711811
发布于 2020-11-30
已采纳
0 人赞同

当你第一次运行你的应用程序时, onCreate 被执行,第一次执行时的模式被设置, DATABASE_VERSION 与该模式相关。

每次在构造函数中调用super( super(context, DATABASE_NAME, null, DATABASE_VERSION); ),SQLiteOpenHelper代码都会查看数据库的版本号,如果其大于最后定义的版本号,则调用 onUpgrade

在最初的开发过程中,改变模式是很常见的,因为你在第一次发布之前就已经加入了你的应用程序。 在这种模式下,你有两个选择。

  • Uninstall and reinstall App everytime the schema changes (loss of data). This causes the initial onCreate to be invoked with new schema again associated with version.
  •