¿Cómo unir dos tablas en Android usando el método de consulta del proveedor de contenido?

Soy nuevo en Android. Estoy usando el proveedor de contenido en mi aplicación. En mi aplicación, deseo unir dos tablas pero no sé cómo hacerlo. Ayúdame a encontrar una solución.

mis tablas:

CREATE TABLE Bank_customers (customer_id varchar PRIMARY KEY , customer_name varchar, customer_date_of_birth date, address varchar, mobile integer, email varchar); CREATE TABLE Bank_accounts (account_number integer(11) PRIMARY KEY, customer_id varchar , account_type text, account_open_date date, account_balance real,FOREIGN KEY(customer_id) REFERENCES Bank_customers(customer_id)); my query: **SELECT mobile,Bank_accounts.customer_id from Bank_accounts,Bank_customers WHERE Bank_customers.customer_id = Bank_accounts.customer_id and Bank_accounts.account_number = 13323;** 

Cómo puedo implementar la consulta anterior utilizando la class de proveedor de contenido "método de consulta"

Esto es fácil de hacer. Necesitas pensar en la unión como una tabla abstracta (lo siento, el código está en Java …)

Primero, cree un nuevo content: URL y use un URIMatcher para analizarlo:

 private static final int JOIN_DIR_TYPE = 10; private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH); static { // ... MATCHER.addURI( MyContract.AUTHORITY, MyContract.Join.TABLE, JOIN_DIR_TYPE); } 

Ahora, en su método de consulta, delegue consultas con la URL correspondiente a un método diferente:

 @Override public Cursor query(Uri uri, String[] proj, String sel, String[] selArgs, String sort) { switch (MATCHER.match(uri)) { case JOIN_DIR_TYPE: return queryJoin(uri, proj, sel, selArgs, sort) break; // ... default: throw new IllegalArgumentException("Unexpected uri: " + uri); } // ... } 

Ahora, todo lo que tienes que hacer es consultar la unión, en el nuevo método:

 private Cursor queryJoin(Uri uri, String[] proj, String sel, String[] selArgs, String sort) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables("Bank_accounts LEFT OUTER JOIN Bank_customers ON (Bank_customers.customer_id = Bank_accounts.customer_id)")"); 

Es posible que desee utilizar ColumnMap de ColumnMap para asignar alias abstractos a los nombres de columna.

Los proveedores de contenido son una abstracción sobre SQL, por lo que no tiene acceso directo a las tablas para join a ellos.

La implementación del proveedor de contenido ya debe proporcionar las tablas unidas.

Si no necesita hacer que los datos estén accesibles para otras aplicaciones, probablemente debería evitar el uso de un proveedor de contenido y usar la database más directamente.

  • Escriba desajuste. Mapa obligatorio <String, Any> Found Map <String, Any?>
  • Cómo anotar una columna como NOT NULL utilizando Android Room Persistence Library
  • No se puede acceder a BaseColumns proporciona la propiedad _ID en Kotlin
  • Error al hacer que Enum sea la key principal en la biblioteca de la database de la sala
  • Kotlin Closable y SQLiteDatabase en Android