SQLite Android Inner Join

Tengo un extraño problema. Estoy buscando datos del servidor e insertándolo en tablas. Después de la inserción de la consulta que los datos mediante la unión interna entre dos tablas. Aquí está mi consulta:

Select F._id, F.id, F.logo, F.total_like, F.distance, F.store_name, F.mob_no_1, F.mob_no_2, F.mob_no_3, F.tel_no_1, F.tel_no_2, F.tel_no_3, F.description, R.total_record, R.total_page, R.current_page from FAVOURITE_STORES as F INNER JOIN FAVOURITE_RECORDS as R on F.area_id = R.area_id where F.area_id = 2 and R.area_id = 2 

Consigo que el cursor cuente como 1 en algunos dispositivos y en algunos dispositivos consigo el contador del cursor como cero. Incluso si los datos están allí en la tabla.

Aquí está mi función de consulta seleccionada

 public Cursor rawQuery(String sQuery,String[] selectionArgs) { if(mDatabase == null) { mDatabase = getWritableDatabase(); } debug("Query "+sQuery); return mDatabase.rawQuery(sQuery,selectionArgs); } 

Clase del cursor

 public class ExampleCursorLoader extends CursorLoader { private Activity mActivity; private String msQuery; private DBUtil mDbUtil; private String[] mSelectionArgs; public ExampleCursorLoader(Activity context, String query,String[] selectionArgs) { super(context); this.mActivity = context; this.msQuery = query; this.mSelectionArgs = selectionArgs; this.mDbUtil = DBUtil.getInstance(mActivity.getApplicationContext()); } public ExampleCursorLoader(Activity context, String query) { this(context,query,null); debug(query); } public Cursor loadInBackground() { debug("Loading in Background"); Cursor cursor=null; cursor = mDbUtil.rawQuery(msQuery,mSelectionArgs); return cursor; } private void debug(String s) { Log.v("Adapter " , "Adapter " + s); } protected void onStartLoading() { forceLoad(); debug("Started Loading"); } protected void onStopLoading() { super.onStopLoading(); } } 

Y así es como lo llamo.

 return new ExampleCursorLoader(mActivity,sQuery); 

El dispositivo que da cuenta como 1 es Samsung s3. Y cero es Samsung Grand. ¿Tiene algún pensamiento o sugerencia sobre esto?

El dispositivo que da cuenta como 1 es Samsung s3. Y cero es Samsung Grand. ¿Tiene algún pensamiento o sugerencia sobre esto?

Este tipo de problema es difícil de explicar porque lo más probable es que no arroje ningún error, pero sólo muestra resultados diferentes y no deseados.

Todo lo que puedes hacer es "mejorar la consulta" :

En primer lugar utilice marcadores de posición y no declaraciones en bruto:

 String query = "... where F.area_id = ? and R.area_id = ?"; String[] whereArgs = {"2", "2"}; 

Además, no es necesario usar la cláusula AS , basta con decir:

 ... from FAVOURITE_STORES F INNER JOIN FAVOURITE_RECORDS R on ... 

De código que proporcionó everythings parece correcto (consulta y un uso de rawQuery ()).

Me parece que la última sección de su cláusula WHERE es innecesaria:

  and R.area_id=2 

Ya ha especificado las filas de la tabla FAVOURITE_STORES para que coincida con id_arquitectura = 2. Como se realiza INNER JOIN en esa columna, sólo devolverá las filas de FAVOURITE_RECORDS donde la columna area_id coincide con la columna area_id de FAVOURITE_STORES.

No estoy seguro de cómo el motor SQLite maneja esto, pero vale la pena intentarlo.

  • Cómo obtener NoClassDefFoundError al intentar utilizar Proguard y SQLcipher en Android
  • La tabla no se creó sqlite android
  • Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de cursor 0
  • Java.lang.IllegalArgumentException: la columna '_id' no existe
  • Cómo capturar excepción en la transacción sqllite - java android
  • Actividad y acceso al fondo de acceso a la base de datos SQLite
  • SQLiteAssetHelper: No se pudo abrir la base de datos para escribir (intentará leer sólo)
  • "SQLiteDiskIOException: código de error 10: error de E / S de disco" retuns en ICS y Samsung Nexus en DROP TABLE
  • SQLiteDiskIOException con el código de error 10: error de E / S de disco
  • Android: actualización de la base de datos de usuarios con SQLiteAssetHelper
  • SQLite Adición de columna con valor predeterminado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.