2012-06-04 24 views
7

Estoy usando el enfoque estándar que aprendí del ejemplo popular de la libreta para construir mi primera aplicación .
Pero me quedé atrapado en un problema extraño.
El archivo de base de datos SQLite (.db) no se está creando en/data/data/package/databases. He verificado el archivo de manifiesto y el archivo OpenHelper desde el desarrollador de Android HeadFirst. Libro (lo estoy usando como referencia) pero no pude averiguar por qué no se creó el archivo de la base de datos.
¿Hay algún permiso especial o algo que necesitemos para ponerlo en funcionamiento?
Lo extraño es que funciona bien para ejemplos precargados. significa que el archivo '.db' se creó para el ejemplo del bloc de notas, pero cuando lo intento, falla. :(
aquí son mis archivosbase de datos sqlite no creada

paquete -. Database.test

1. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="10" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".Database_testActivity" 
     android:label="@string/app_name" > 
    </activity> 
</application> 

2.TestOpenHelper.java

package database.test; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class TestOpenHelper extends SQLiteOpenHelper { 

TestOpenHelper(Context context){ 
    super(context,"mydb.db",null,1); 
} 
@Override 
public void onCreate(SQLiteDatabase database){ 
    database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer);"); 
} 
public void onUpgrade (SQLiteDatabase database, int oldVersion, int newVersion){ 
    database.execSQL("drop table if exists test1"); 
    onCreate(database); 
} 
} 

3.Database_testActivity.java

package database.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 

public class Database_testActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView listview = (ListView)findViewById(R.id.test_list); 
    TestAdapter ta = new TestAdapter(); 
    listview.setAdapter(ta); 

    TestOpenHelper openHelper = new TestOpenHelper(this); 
} 
} 

Sé que es una pregunta muy básica, pero yo he estado tratando de resolver esto por últimos quince días y ahora estoy completamente frustrado.
Por favor, ayuda ..

+1

Debe usar 'Log' en varios lugares y monitorear' logcat' para rastrear lo que está sucediendo. También puedo estar equivocado, pero ¿ha intentado usar "mydb" para el nombre db en el constructor 'TestOpenHelper'? Como dije, puedo estar equivocado, pero no puedo evitar sentir que usar una extensión de nombre de archivo (como en "mydb.db") podría causar problemas. – Squonk

+0

puede arrojar algo de luz sobre 'usar Log'. He intentado varios nombres, pero no pasa nada. gracias – Bond

+0

también todas las aplicaciones. in/data/data comienza con com.android.something pero el mio no. ¿puede ser la razón de mi problema? – Bond

Respuesta

22

cambiar esta situación:

database.execSQL("create table test_1 " + " (field1 integer primary key, field2 integer)"); 

y esto TestOpenHelper openHelper = new TestOpenHelper(this); cambio a SQLiteDatabase db = new TestOpenHelper(this).getWritableDatabase();

Usted base de datos realmente no creado, sólo se crea instancia de su SQLiteOpenHelper pero para crear o abrir la base de datos tiene que usar el método getWritableDatabase() o getReadableDatabase().

Exactamente de documentos:

crear y/o abrir una base de datos que se utilizará para la lectura y la escritura .

+0

wow ... funcionó. muchas gracias. – Bond

+3

+1 - Bien atrapado. No había visto que no se llamaba a 'getWritableDatabase()' o 'getReadableDatabase()'. – Squonk

+0

su código no funcionó porque nunca crea una base de datos solo crea una instancia de su SQLiteOpenHelper man :-) para crear una base de datos debe llamar a 'getWritableDatabase()' o 'getReadableDatabase()' estos métodos crean/abren su base de datos. cuando su base de datos ya está creada, por lo que este método siempre será solo abrir su base de datos. – Sajmon

Cuestiones relacionadas