2011-05-21 29 views

Respuesta

13

En el archivo de clase DBAdapter.java puede hacerlo.


@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE_1); 
     db.execSQL(CREATE_TABLE_2); 
     db.execSQL(CREATE_TABLE_3); 
     db.execSQL("insert into " + DATABASE_TABLE3 + "(" + KEY_ROWID + "," 
       + KEY_DEF + ") values(1,'')"); 
    } 

Como este tipo.

+0

¿Es que trabajan sólo para la primera ejecución de la aplicación o cada vez que se está ejecutando? –

+0

@Setayeshi, de developer.android.com "Se invoca cuando se crea la base de datos por primera vez. Aquí es donde debería ocurrir la creación de tablas y la población inicial de las tablas". –

2

Los requisitos únicos o de primera carga como este son comunes.

1) Establezca una variable de marcador llamada FIRSTLOAD y establézcala en True. Asegúrese de guardar esta variable en el almacenamiento aislado en el dispositivo para volver a leer cada vez que se inicia la aplicación. 2) Cree un método que verifique el valor de FIRSTLOAD y solo se ejecute si FIRSTLOAD es verdadero. Coloque aquí su código que 'agrega [s] valores iniciales a la base de datos SQLite'. A continuación, establezca la variable FIRSTLOAD en falso. ¡De esta manera solo ejecutará el código una vez!

Boolean FIRSTLOAD= new Boolean("true"); 

void SetInitialValues() 
{ 
    if(!FIRSTLOAD) 
     return; 

    // insert your code to run only when application is started first time here 


    FIRSTLOAD = False; 
} 
2

Debe utilizar SQLiteOpenHelper para este

private static class OpenHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "rss.sqlite"; 
    private static final int DATABASE_VERSION = 1; 

    OpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE RSS (TITLE TEXT, LINK TEXT, DESCR TEXT, PUBDATE DATE, GUID TEXT, READ TEXT, TYPE TEXT)"); 
     db.execSQL("CREATE TABLE PAGE (LINK TEXT, CONTENT TEXT)"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    } 
} 

Y úsela en el código

OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
0

Usted shou Verifique el número de objetos dentro de su base de datos cada vez que abra la base de datos por primera vez en su aplicación. No olvide que el usuario puede liberar todos los datos.

//Open DataBase 
    MyDb.Open(); 

    //Get All List 
    MyCursor = MyDb.getAllNames(); //You should have a function to get all the table data 

    //First Time we open Database, add default Values 
    if (MyCursor.getCount() < 1) 
    { 
     AddDefaultValuesToDataBase(); 
    } 

Desde aquí puede seguir obteniendo los valores nuevamente.

Espero que ayude, BR, Adrian.

1

En caso de que esté utilizando la biblioteca org.droidparts OR-Mapper para acceder a su base de datos, puede hacerlo así.

En su implementación de

public class CategoryEntityMgr extends EntityManager<Category> { 
    public CategoryEntityMgr(Context ctx) { 
     super(Category.class, ctx); 
    } 

    // NEW --> this one must be used in onCreateTables or you will receive a database locked exception 
    private CategoryEntityMgr(Context ctx, SQLiteDatabase db) { 
     super(Category.class, ctx, db); 
    } 
} 

En su implementación de AbstractDbOpenHelper:

protected void onCreateTables(SQLiteDatabase db) { 
    // create your tables as usual 
    createTables(db, Booking.class, Category.class); 

    // Use a new instance of your entity manager 
    // but use the 2nd constructor to provide the db connection 
    CategoryEntityMgr mgr = new CategoryEntityMgr(ctx, db); 

    // add the new table row/entity you an to have 
    Category c = new Category(); 
    c.name = "the value for this column"; 
    mgr.createOrUpdate(c); 
} 
+0

Sería mejor si esta fuera una respuesta genérica, no vinculada a una implementación de biblioteca específica. – Levon

Cuestiones relacionadas