Intereting Posts
   

如何在android中的SQLite数据库中运行查询?

在我的SQLite数据库管理器中,我可以查询:

SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%'; 

此查询返回2012年7月份名为“tripmileagetable”的表中的里程表列的总和,但我想在android查询中编写此代码。

但我无法弄清楚如何在database.query()方法中建立此查询,可以任何一个帮助吗?

 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(); } } 

这取决于您计划如何在Android中访问数据库。 您可以尝试以下方式:

 SQLiteDatabase db = this.getWritableDatabase(); String selectQuery = "select sum(odometer) as odometer from tripmileagetable where date like '2012-07%'"; Cursor cursor = db.rawQuery(selectQuery, null); 

如果您使用的是SQLiteOpenHelper类,则将使用上述内容。

如果您自己创建了数据库文件,则可以执行以下操作:

 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); 

对SQLiteDatase,Cursor和SQLiteOpenHelper进行一些研究。

此示例可能对您有所帮助:

https://github.com/nraboy/Spyfi/blob/master/Android/src/com/nraboy/spyfi/DataSource.java

您可以使用rawQuery方法:

 Cursor c = database.rawQuery("SELECT SUM(odometer) as odometer FROM tripmileagetable where date like '2012-07%'", null); 

您的字段未在表数据库上创建,请查看表格中的字段。 因为我已经看到了我的问题。 我使用SQLite Administrator来查看我的数据库。

或者如果你没有它,请查看create database的源代码。 确保您的源代码是真的,然后您可以删除文件资源管理器上的旧数据库(使用eclipse我的意思)。 并且您可以使用新数据库再次运行。

Android完全支持SQLite DB 。 您在应用程序中创建的所有数据库都可以从应用程序的所有类中访问(不在您的应用程序之外!)。

首先,您应该创建一个扩展SQLiteOpenHelper的Java类。 在这里,您必须覆盖onCreate()onUpdate()方法。 可以想象,第一个在创建DB时被调用,而后者在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); } } 

现在,在新的Java类中,您可以创建自定义方法来查询数据库。

要编写DB,您应该使用getWritableDatabase() ,而要读取它,您应该使用getReadableDatabase() 。 它们都返回一个SQLiteDatabase对象,最终抛出一个SQLiteException 。 特别是,要查询您的数据库,有两种SQLiteDatabase方法可用: rawQueryquery (都返回一个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; } 

请注意,SQLite会自动在参数(?)周围放置单引号(’)。

你可以在这里find一个很好的教程: http : //www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android