¿Cómo ejecutar la consulta en la base de datos SQLite en android?
En mi administrador de base de datos SQLite puedo consultar esto:
SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%';
Esta consulta me devuelve la suma total de la columna del odómetro de la tabla llamada 'tripmileagetable' del mes de julio de 2012, pero quiero escribir este código en la consulta android.
- La base de datos SQLite de Android está bloqueada
- ¿Cómo puedo simular una actualización de la aplicación?
- SQLite rawQuery campos de selecciónArgs y enteros
- Citas simples en sqlite en android
- Seleccione un primer carácter distinto basado en la columna de cadena
Pero no puedo averiguar cómo establecer esta consulta en el método database.query (), puede cualquier ayuda?
- Datos de SQLite a un RecyclerView
- SQLite de Android: Actualización
- ListView no se actualiza al agregar a SQLiteDatabase
- SQLiteDiskIOException: error de E / S de disco al crear base de datos
- NoClassDefFoundError al usar greenDao
- El grupo por consulta no funciona en android 2.1
- Cómo incrustar una fuente personalizada en la aplicación de Android (WebView)
- SQLCipher para Android: icudt46l.zip realmente necesario?
final Cursor cursor = db.rawQuery("SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%';", null); int sum = 0; if (cursor != null) { try { if (cursor.moveToFirst()) { sum = cursor.getInt(0); } } finally { cursor.close(); } }
Depende de cómo planee acceder a la base de datos en Android. Usted puede intentar algo como:
SQLiteDatabase db = this.getWritableDatabase(); String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'"; Cursor cursor = db.rawQuery(selectQuery, null);
Lo anterior se utilizaría si está utilizando una clase SQLiteOpenHelper.
Si ha creado el archivo de base de datos usted mismo, podría hacer algo como:
SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.package.name/databases/dbname.db", null, SQLiteDatabase.OPEN_READWRITE); String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'"; Cursor cursor = db.rawQuery(selectQuery, null);
Hacer algunas investigaciones sobre SQLiteDatase, Cursor y SQLiteOpenHelper.
Este ejemplo puede ayudarle a:
https://github.com/nraboy/Spyfi/blob/master/Android/src/com/nraboy/spyfi/DataSource.java
Puede utilizar el método rawQuery :
Cursor c = database.rawQuery("SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%'", null);
Su campo no es crear en su base de datos de la tabla, compruebe hacia fuera el campo en su tabla. Porque he visto ese problema en el mío. Utilizo el administrador de SQLite para ver mi base de datos.
O si no lo tiene, busque en su código fuente de crear base de datos. Asegúrese de que su código fuente es cierto, entonces usted puede eliminar su antigua base de datos en el explorador de archivos (utilizando eclipse quiero decir). Y se puede ejecutar de nuevo con la nueva base de datos.
Android soporta totalmente los DB de SQLite . Todos los DB que crees dentro de tu aplicación serán accesibles desde todas las clases de tus aplicaciones (NO fuera de tu aplicación).
En primer lugar, debe crear una clase Java que extienda SQLiteOpenHelper . Aquí, tiene que anular los métodos onCreate () y onUpdate () . Como se puede suponer, el primero se llama cuando se crea el DB, mientras que el último se llama cuando se modifica el DB.
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.content.Context; import android.database.Cursor; import android.content.ContentValues; /** * Class DatabaseHelper. */ public class DatabaseHelper extends SQLiteOpenHelper { //Database parameters: private static final String DATABASE_NAME = "dbname"; // the name of the DB! private static final int DATABASE_VERSION = 2; private static final String DATABASE_TABLE_NAME = "tripmileagetable"; // the name of the table! //Table attributes: private static final String DATABASE_TABLE_ATTR_ID = "id"; // attr1 private static final String DATABASE_TABLE_ATTR_ODOMETER = "odometer"; // attr2 private static final String DATABASE_TABLE_ATTR_DATE = "date"; // attr3 /** * Class constructor. * * @param context the context. */ DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String create = "CREATE TABLE " + DATABASE_TABLE_NAME + " (" + DATABASE_TABLE_ATTR_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + DATABASE_TABLE_ATTR_ODOMETER + " INTEGER, " + DATABASE_TABLE_ATTR_DATE + " TEXT);"; db.execSQL( create ); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE_NAME); onCreate(db); } }
Ahora, dentro de la nueva clase Java, puede crear métodos personalizados para consultar su base de datos.
Para escribir el DB debes usar getWritableDatabase () , mientras que para leerlo debes usar getReadableDatabase () . Ambos devuelven un objeto SQLiteDatabase y, finalmente, lanzan una excepción SQLiteException . En particular, para consultar su base de datos, hay dos métodos SQLiteDatabase disponibles: rawQuery y query (ambos devuelven un objeto Cursor ).
/** * Get the sum of the odometer of a particular month and year. * * @param year the year. * @param month the month. * @return the sum of the odometer of the year and the month. */ public int sumOdometer(Integer year, Integer month) { //Date composition: String date = year.toString() + "-" + month.toString() + "%"; //SQL query: String query = "SELECT SUM(" + DATABASE_TABLE_ATTR_ODOMETER + ") AS " + DATABASE_TABLE_ATTR_ODOMETER + " FROM " + DATABASE_TABLE_NAME + " WHERE " + DATABASE_TABLE_ATTR_DATE + "LIKE ?"; //Execute the SQL query: SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.rawQuery(query, new String [] {date}); int sum = 0; if( cursor.moveToFirst() ) { // moves the cursor to the first row in the result set... sum = cursor.getInt( cursor.getColumnIndex(DATABASE_TABLE_ATTR_ODOMETER) ); } //Close the Cursor: cursor.close(); return sum; }
Tenga en cuenta que SQLite pone automáticamente comillas simples (') alrededor de los argumentos (?).
Usted puede encontrar un buen tutorial aquí: http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android
- Cómo poner base de datos existente en el archivo .apk?
- Declaración de la capacidad de una lista en Java