gpt4 book ai didi

java - Android SQLite 表不存在

转载 作者:行者123 更新时间:2023-11-29 20:42:25 24 4
gpt4 key购买 nike

我正在尝试在 SQLite 表中创建和插入行。但是,插入表不存在的行时出现错误。谁能告诉我我在这里做错了什么?谢谢!

Activity 中调用类创建数据库和插入行的代码如下:

    // Open database
db = new DBAdapter(this);
db.open();

// TODO: insertRecept statements hieronder verwijderen
// Dienen enkel voor test om inhoud te hebben
long id = db.insertRecept("aardappelen - bloemkool - kotelet");
id = db.insertRecept("rijst - wokgroenten - scampi - currysaus");
id = db.insertRecept("nasi goreng - omelet");
id = db.insertRecept("ebly - veggieburger - provencaalse saus");
id = db.insertRecept("rijst - kipfilet - zoetzure saus");
id = db.insertRecept("ebly - veggieburger - provencaalse saus");
id = db.insertRecept("puree - fish-sticks - spinazie");
id = db.insertRecept("tortellini - kaassaus");
id = db.insertRecept("aardappelen - bloemkool - chippolata");
id = db.insertRecept("pizza");
id = db.insertRecept("frietjes");
id = db.insertRecept("aardappel - zalm - prei - melksaus");
db.close();

DBAdapter类如下:

package be.bertcarremans.weekmenu;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.sql.SQLException;

public class DBAdapter {
static final String KEY_ROWID = "_id";
static final String KEY_RECEPT_TITEL = "recept_titel";
static final String TAG = "DBAdapter";

static final String DATABASE_NAME = "recepten_db";
static final String DATABASE_TABLE = "recepten";
static final int DATABASE_VERSION = 1;

static final String DATABASE_CREATE =
"CREATE TABLE recepten (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "recept_titel TEXT NOT NULL);";

DatabaseHelper DBHelper;
SQLiteDatabase db;

final Context context;

// Constructor
public DBAdapter(Context ctx) {
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS recepten");
}
}

// database openen
public DBAdapter open() {
db = DBHelper.getWritableDatabase();
return this;
}

// database sluiten
public void close() {
DBHelper.close();
}

// recept toevoegen
public long insertRecept(String recept) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_RECEPT_TITEL, recept);
return db.insert(DATABASE_TABLE, null, initialValues);
}
}

最佳答案

看起来您很可能更改了模式结构,并且(很可能)更改了数据库的版本号。这与损坏的 onUpgrade() 实现一起导致了您的问题。

作为快速解决方案:卸载应用程序并重新安装 - 这将完全删除数据库并让您的应用程序在第一次运行时创建它。但作为长期解决方案,您需要修复 onUpgrade()。现在你这样做:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS recepten");
}

所以用人类语言来说就是:“当我们需要升级时,只需擦 table ”。那之后重新创建它呢?如果你不这样做,你就没有 table 。如果您没有更新代码的计划,那么我会将我的表删除/创建代码(分别)移至 createTables()/removeTables() 方法,并且只是让我的 onUpgrade() 使用它:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
removeTables(db);
createTables(db);
}

关于java - Android SQLite 表不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com