Causado por: android.database.sqlite.SQLiteException: no hay tal tabla: (código 1) Android

Tenemos una base de datos sqlite en nuestra aplicación. Su funcionamiento muy bien para todos los usuarios, pero pocos de ellos experimentando el Caused by: android.database.sqlite.SQLiteException: no such table: generalSettings (code 1): , while compiling: select * from generalSettings error.

A continuación se muestra mi clase auxiliar sqlite para crear el db y el registro de errores. En assert/Master.db tenemos la tabla generalSettings . Pero después de copiarlo al dispositivo la tabla falta. Esto está ocurriendo sólo para pocos usuarios. Busqué la solución, pero no puedo encontrar la exacta. Equipo por favor ayúdeme a arreglar esto.

Código:

 import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.util.Log; public class InstallDB extends SQLiteOpenHelper { Context ctx; String DBNAME; String DBPATH; Modules modObj = new Modules(); public InstallDB(Context context, String name) { super(context, name, null, 1); this.ctx = context; this.DBNAME = name; this.DBPATH = this.ctx.getDatabasePath(DBNAME).getAbsolutePath(); Log.e("Path 1", DBPATH); } public void createDataBase() { boolean dbExist = checkDataBase(); SQLiteDatabase db_Read = null; if (!dbExist) { synchronized (this) { db_Read = this.getReadableDatabase(); Log.e("Path 2", this.getReadableDatabase().getPath()); db_Read.close(); copyDataBase(); Log.v("copyDataBase---", "Successfully"); } // try { // } catch (IOException e) { // throw new Error("Error copying database"); // } } } private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DBPATH; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } catch (Exception e) { Log.i("SQLite Error", "database does't exist yet."); } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } private void copyDataBase() { try { InputStream myInput = ctx.getAssets().open(DBNAME); String outFileName = DBPATH; OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024 * 3]; int length = 0; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } catch (Exception e) { Modules.stacTaceElement = e.getStackTrace(); StringWriter stackTrace1 = new StringWriter(); e.printStackTrace(new PrintWriter(stackTrace1)); System.err.println(stackTrace1); Intent send = new Intent(Intent.ACTION_SENDTO); String uriText; uriText = "mailto:[email protected]" + "&subject=Error Report" + "&body=" + stackTrace1.toString(); uriText = uriText.replace(" ", "%20"); Uri uri = Uri.parse(uriText); send.setData(uri); ctx.startActivity(Intent.createChooser(send, "Send mail...")); // TODO: handle exception } } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 

Registro de errores:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{palmagent.FidelityAgent.Two/palmagent.FidelityAgent.Two.PassNew}: android.database.sqlite.SQLiteException: no such table: generalSettings (code 1): , while compiling: select * from generalSettings at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5102) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: android.database.sqlite.SQLiteException: no such table: generalSettings (code 1): , while compiling: select * from generalSettings at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314) at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253) at palmagent.FidelityAgent.Two.masterDatabase.selectquery(masterDatabase.java:59) at palmagent.FidelityAgent.Two.Modules.checkDatabase(Modules.java:28825) at palmagent.FidelityAgent.Two.PassNew$LoaduserDetails.onPreExecute(PassNew.java:140) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) at android.os.AsyncTask.execute(AsyncTask.java:535) at palmagent.FidelityAgent.Two.PassNew.onCreate(PassNew.java:120) at android.app.Activity.performCreate(Activity.java:5248) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) ... 11 more 

El problema es que algunos dispositivos están actualizando su aplicación, por lo que el checkDataBase() devuelve true , por lo que no está llamando a copyDataBase() . Por lo que está utilizando base de datos anterior que no tiene generalSettings tabla. Para resolver este intento:

 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(newVersion>oldVersion) copyDatabase(); } 

Y también actualizar su constructor:

 public InstallDB(Context context, String name) { super(context, name, null, DB_VERSION); // DB_VERSION is an int,update it every new build this.ctx = context; this.DBNAME = name; this.DBPATH = this.ctx.getDatabasePath(DBNAME).getAbsolutePath(); Log.e("Path 1", DBPATH); } 

Otra posible solución es simplemente desinstalar una aplicación del emulador de Android y después de ejecutarlo de nuevo.

Si sólo desea eliminar una aplicación:

 1.Start the emulator. 2.Open the Android settings app. 3.Select "Applications" (Called "Apps" on Android 4.0 or higher) 4.Select "Manage Applications" (Only on Android 3.2 or lower) 5.Select the application you want to uninstall. 6.Click "Uninstall" 

Después de pasar un par de horas me dieron esta solución:

1) Configuración> Administrador de aplicaciones

2) Seleccionar aplicación

3) Borrar datos

4) Desinstalar la aplicación

Ahora ejecuta la aplicación desde Android Studio

Espero que esto funcione correctamente

Este error se produce porque no está utilizando DATABASE_VERSION

 public class DatabaseHelper extends SQLiteOpenHelper { private static SQLiteDatabase sqliteDb; private static DatabaseHelper instance; private static final int DATABASE_VERSION = 1; 

Aumente su versión cada vez que realice cambios en su base de datos aumente DATABASE_VERSION con +1.

Es una excepción de actualización. Asegúrese de tener la tabla en su base de datos anterior. Si no, crearlo. PS: si estás recién desarrollando esta aplicación, desinstala de tu emulador o de tu dispositivo y vuelve a instalarlo. Pero su no recomendado para los datos ne ne perdido.

1. Cambie su versión de DataBase o primero desinstale sus aplicaciones en el emulador o teléfono y vuelva a instalar. De esta manera piensa en tu problema Se resolverá.

Si está utilizando GreenDao y recibe este error, asegúrese de que está unistalling la aplicación e inténtelo de nuevo. Esto resolvió mi problema

Supongamos que si ejecuta la aplicación con la Versión 1 de la base de datos, si cambia la estructura de la tabla o agrega una nueva tabla, debe aumentar la Versión de la base de datos a 2 y más si realiza más cambios en ella.

 public class AppDatabase extends SQLiteOpenHelper { // Database Name private static final String DATABASE_NAME = "myDatabase"; // Database Version private static final int DATABASE_VERSION = 1; public AppDatabase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } } 

Aumente este valor DATABASE_VERSION si se realiza alguna modificación.

  • ¿Cuándo se llama a OnUpgrade y cómo se obtiene el parámetro oldVersion?
  • Causado por: android.database.sqlite.SQLiteException: No se puede actualizar la base de datos de sólo lectura de la versión 0 a 1
  • Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de cursor 0
  • Error de misterio: "No se pudo abrir la base de datos phenotype.db, la base de datos está bloqueada." No se puede encontrar ninguna información en línea
  • Cómo comprobar tablas de base de datos sqlite en el dispositivo?
  • Java.lang.IllegalArgumentException: la columna '_id' no existe
  • Android.database.sqlite.SQLiteCantOpenDatabaseException: error desconocido (código 14): No se pudo abrir la base de datos
  • Creo que he llegado con la peor manera de comparar dos fechas; ¿es posible hacerlo mejor?
  • Android - Base de datos pre-poblada, insertada o pre-cargada?
  • ¿Cuál es la diferencia entre SQLiteOpenHelper.close () y SQLiteDatabase.close ()?
  • Cerrar () nunca se llamó explícitamente en base de datos incluso después de implementar close ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.