I am trying to create and insert rows in an SQLite table. However, I get an error when inserting the rows that the table does not exist. Can anyone tell me what I am doing wrong here? Thanks!
The code in the activity that is calling the class to create the database and insert rows is as follows:
// 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();
The DBAdapter class is as follows:
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);
}
}
It looks you most likely have changed the schema structure, and (most likely) bumped version number of your database. This, in conjunction with broken onUpgrade()
implementation caused your problems.
As a quick solution: uninstall the app and install again - this will completely wipe the database and make your app create it on 1st run. But as a long term solution, you need to fix onUpgrade()
. Right now you do this:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS recepten");
}
so in human language it reads: "when we need to upgrade, just wipe the table". What about re-creating it after that? If you won't do that, you got no table. If you got no plans to have update code, then I'd move my table removal/creation code to (respectively) ie createTables()
/ removeTables()
methods and just make my onUpgrade()
use it:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
removeTables(db);
createTables(db);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.