No se puede abrir la base de datos-Android

Estoy desarrollando una sencilla aplicación de Android con SQL. He seguido las siguientes guías – http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

Tengo un error al intentar abrir la base de datos. Aquí está mi DataBaseHelp.Java Class-

public class DataBaseHelper extends SQLiteOpenHelper{ private static String DB_PATH = "/data/data/and.testDB/databases/"; private static String DB_NAME = "MyData"; private SQLiteDatabase myDataBase; private final Context myContext; public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do nothing - database already exist }else{ this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } private void copyDataBase() throws IOException{ //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() { //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 

Y este es mi testDB.Java clase-

 public class testDB extends Activity { SQLiteDatabase myDataBase; public String[] gur = new String[4]; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DataBaseHelper myDbHelper = new DataBaseHelper(this); myDbHelper = new DataBaseHelper(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); // Here is the problem-Can't open the database/ }catch(SQLException sqle){ throw sqle; } myDataBase = myDbHelper.getWritableDatabase(); Cursor c = myDataBase.rawQuery("SELECT * FROM beer", null); if (c != null ) { if (c.moveToFirst()) { for(int x=0;x< 1;x++) { gur[x] = (c.getString(c.getColumnIndex("name"))); c.moveToNext(); } } Toast.makeText(this,gur[0],Toast.LENGTH_LONG).show(); } } } 

Creé la base de datos usando SQLite Database Browser, creé una tabla llamada "cerveza", añadí 2 filas y lo puse en la carpeta / assests en mi proyecto.

Tenga en cuenta que soy nuevo en SQL, y es la primera vez que lo uso. Busqué todo el día para una respuesta y no pude encontrar uno.

¡Gracias!

Abra su base de datos en el navegador de base de datos sqlite y agregue una nueva tabla llamada "android_metadata",

Puede ejecutar la siguiente instrucción SQL para hacerlo:

CREATE TABLE "android_metadata" ("locale" TEXTO DEFAULT 'en_US')

Ahora inserta una sola fila con el texto 'en_US' en la tabla "android_metadata":

INSERT INTO "android_metadata" VALUES ('en_US')

Entonces, es necesario cambiar el nombre del campo de identificación principal de sus tablas a "_id" por lo que Android sabrá dónde vincular el campo ID de sus tablas.

Ahora copia el nuevo archivo de base de datos en su carpeta de activos de proyectos, funcionará …..

Debe crear la base de datos en el método onCreate de su ayudante de base de datos (la extensión de SQLiteOpenHelper). Su llamada a getReadableDatabase () no devolverá nada hasta que se haya creado una base de datos en el contexto de la aplicación.

 db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + "foo TEXT, bar TEXT);"); 

Algo en ese sentido. Obviamente llene su propio esquema de datos.

A continuación, puede leer los datos de la base de datos que tiene en su carpeta de activos e insertarlos en la base de datos utilizando los comandos sqlite.

He aquí un tutorial que utilizé para empezar:

http://www.devx.com/wireless/Article/40842

Sugiero utilizar otro tutorial. Para crear una base de datos fuera de los dispositivos es "un poco" cableado. Lo aprendí de un libro, pero creo que este tutorial utiliza el procedimiento correcto.

Edit: Ok, el tutorial es para un caso especial

La mayoría de todos los ejemplos y tutoriales de Android que hay ahí asumen que desea crear y rellenar su base de datos en tiempo de ejecución y no utilizar y acceder a una base de datos independiente y precargada con su aplicación de Android.

El método que voy a mostrar toma su propio archivo de base de datos SQLite de la carpeta "assets" y copia en la ruta de acceso de la base de datos del sistema de su aplicación para que la API de SQLiteDatabase pueda abrirlo y acceder a él normalmente.

  • SelectionArgs in ContentResolver.query (...) puede ser una subconsulta?
  • Error desconocido (código 14): No se pudo abrir la base de datos
  • NotifyChange con uri modificado de contentProvider.update ()
  • Mejor alternativa de la librería Android de SQLite?
  • Pre-poblado Trie
  • Android usando SQLCipher - ¿cómo se puede descifrar?
  • ¿Cómo recuperar datos de un cursor en android?
  • ¿Qué hará un SQLiteCursor si una columna es nula?
  • Cómo formatear la cláusula WHERE y '?' En una consulta SQLite?
  • Android sqlite eliminar consulta no funciona
  • No se puede usar como cláusula en la aplicación android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.