11
votes

La base de données Android recueille chaque fois que l'application est lancée

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);
      }
   }
}


3 commentaires

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


4 Réponses :


1
votes

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);
    }

}


0 commentaires

12
votes

Regardez votre constructeur DBWRAPPER,

Vous appelez

context.deledatabase (nom_daturographique);

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.


1 commentaires

@LIZB PLZ aidez-moi lien dans mon problème



1
votes

Le lien ci-dessous aidons, espérons-le,

Stackoverflow.com -> Quertise Si AdroidDD DB existe!

espère que vous aide

l'affiche ci-dessus également mentionné que vous supprimez la base de données xxx p > En You DBWrapper () constructeur


0 commentaires

0
votes

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.

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.

Créer une table s'il n'existe pas Table_Name (Key Data_Type);

Appelez cette requête à l'intérieur de la méthode Oncreate.


0 commentaires