Pourquoi SQLITEOPENHELLER appelle-t-il Oncreate () chaque fois que ma demande démarre. Voici mon code pour Oncreate () Code> package db.main;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import testing.main.Circle;
public class DBWrapper {
private static final String DATABASE_NAME = "circles.db";
private static final int DATABASE_VERSION = 1;
private static final String[] TABLES = new String[] { "circles"};
private Context context;
private OpenHelper openHelper;
public DBWrapper(Context context) {
context.deleteDatabase(DATABASE_NAME);
this.context = context;
this.openHelper = new OpenHelper(this.context);
}
public void insertCircle(Circle c) {
String sql = "insert into circles (x, y) values (" + c.getX() + ", " + c.getY() + ")";
Log.i("DBWrapper::insertCircle()", "Executing sql: " + sql);
openHelper.getWritableDatabase().execSQL(sql);
}
public void clearCircles() {
String sql = "delete * from circles";
Log.i("DBWrapper::clearCircles()", "Executing sql: " + sql);
openHelper.getWritableDatabase().execSQL(sql);
}
public ArrayList<Circle> getCircles() {
ArrayList<Circle> circles = new ArrayList<Circle>();
Cursor cursor = openHelper.getWritableDatabase().query(TABLES[0], null, null, null, null, null, null);
//Cursor cursor = openHelper.getWritableDatabase().rawQuery("select * from circles", null);
Log.i("DBWrapper::getCircles()", "move to first1");
if (cursor.moveToFirst()) {
Log.i("DBWrapper::getCircles()", "move to first");
do {
Log.i("DBWrapper::getCircles()", "Creating circle: " + cursor.getString(1) + ", " + cursor.getString(2));
circles.add(new Circle(Integer.parseInt(cursor.getString(1)),
Integer.parseInt(cursor.getString(2))));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return circles;
}
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("OpenHelper::onCreate()", "Enter");
//create cards table
db.execSQL(
"create table circles" +
"("+
"id integer primary key,"+
"x integer not null," +
"y integer not null"+
")"
);
Log.i("OpenHelper::onCreate()", "Exit");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("Example", "Upgrading database, this will drop tables and recreate.");
for(String s: TABLES) {
db.execSQL("DROP TABLE IF EXISTS " + s);
}
onCreate(db);
}
}
}
4 Réponses :
Essayez ceci:
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String DATENBANK_NAME = "yourdatabase.db";
private static final int DATENBANK_VERSION = 1;
public DataBaseHelper(Context context) {
super(context, DATENBANK_NAME, null, DATENBANK_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(PartialTripTbl.SQL_CREATE);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + PartialTripTbl.TABLE_NAME);
onCreate(db);
}
}
Regardez votre constructeur DBWRAPPER, P>
Vous appelez p>
Cela supprimera le fichier de base de données chaque fois que vous l'appelez. Forçant le SQLhelper pour recréer la base de données. P> context.deledatabase (nom_daturographique); code> p>
@LIZB PLZ aidez-moi lien dans mon problème
Le lien ci-dessous aidons, espérons-le,
Stackoverflow.com -> Quertise Si AdroidDD DB existe! p>
espère que vous aide p>
l'affiche ci-dessus également mentionné que vous supprimez la base de données p>
Si vous souhaitez créer une fois la base de données lorsque l'application est lancée pour la première fois, vous devez modifier cette requête. P>
Vous devez avoir besoin de vérifier que la base de données existe déjà ou non, sinon que crée la base de données d'autre ne crée pas de base de données. P>
Créer une table s'il n'existe pas Table_Name (Key Data_Type); P>
Appelez cette requête à l'intérieur de la méthode Oncreate. P>
Hmmm. Testez-vous sur un émulateur? Si tel est le cas, vous devriez peut-être vérifier que vous n'utilisez pas les données utilisateur de l'émulateur avant de le démarrer.
Peut-être que vous pourriez poster votre corps entier de code de base de données? Je ne vois pas le problème dans ce que vous avez ici: /
PS - Il pourrait être bon d'ajouter "si ce n'est pas existant" à votre Create SQL. Qui empêchera une erreur ou écrasera l'ancien dB