AndroidはSQLiteDBを完全にサポートしています。アプリ内で作成するすべての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を照会するためのカスタムメソッドを作成できます。
DBを作成するには、getWritableDatabase()を使用する必要がありますが、DBを読み取るには、getReadableDatabase()を使用する必要があります。どちらもSQLiteDatabaseオブジェクトを返し、最終的にSQLiteExceptionをスローします。特に、DBをクエリするには、rawQueryとquery(どちらもCursorオブジェクトを返します)の2つのSQLiteDatabaseメソッドを使用できます。
/**
* 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は、引数(?)を自動的に一重引用符(')で囲んでいることに注意してください。
ここで良いチュートリアルを見つけることができます:http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android