Android SQLiteデータベース開発使用例
一、
まず、SQLiteOpenHelperから継承されたサブクラスを作成して、データベースの作成、アップグレードを管理するツールクラスを作成する必要があります.コードは次のとおりです.
onCreate関数は、データベースの最初の作成時に呼び出されるため、ここでstudentsデータベースを作成するSQL文を実行します.
注:データベースを作成するSQL文のフィールドの順序は、Cursorクラスを使用してインデックスを使用してフィールド値を取得するときのインデックスの場所です.たとえば、studentsテーブルの最初のフィールドがidである場合、idのインデックス位置は0です.
二、
次にstudentクラスが学生情報を表すエンティティクラスを作成します.
次に、SQLiteDbHelperのgetWriteDatabase関数からデータベースの操作オブジェクトを取得する必要があります.コードは次のとおりです.
三、
3.1
studentsテーブルにいくつかのデータを挿入してみます.
注:ContentValueに格納されているキーは、データベース内のフィールド名と一致する必要があります.ContentValueの値はフィールドの値です.
3.2
データを挿入したら、クエリー操作を試してみましょう.
注意:cls_idのタイプは整数ですが、パラメータ4は文字列値-new String[]{"3"}を与えます.ここで心配する必要はありません.SQLiteは最下位でタイプ変換を行い、パラメータ4の値をテーブルのフィールドに対応するタイプに変換します.
3.3
削除操作も同様です.
3.4
更新操作のパラメータは、削除操作よりもContentValueが1つ多くなります.つまり、更新するフィールドキーの値のペアです.
まず、SQLiteOpenHelperから継承されたサブクラスを作成して、データベースの作成、アップグレードを管理するツールクラスを作成する必要があります.コードは次のとおりです.
public class SQLiteDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "database.db";
public static final int DB_VERSION = 1;
public static final String TABLE_STUDENT = "students";
// students sql
private static final String STUDENTS_CREATE_TABLE_SQL = "create table" + TABLE_STUDENT + "("
+ "id integer primary key autoincrement,"
+ "name varchar(20) not null,"
+ "tel_no varchar(11) not null,"
+ "cls_id integer not null"
+ ");";
public SQLiteDbHelper(Context context) {
//
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// db.execSQL SQL
// students
db.execSQL(STUDENTS_CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// onUpgrade ,
switch (oldVersion) {
case 1:
// do something
break;
default:
break;
}
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
if (!db.isReadOnly()) {
//
db.execSQL("PRAGMA foreign_keys = 1;");
//
String query = String.format("PRAGMA foreign_keys = %s", "ON");
db.execSQL(query);
}
}
}
onCreate関数は、データベースの最初の作成時に呼び出されるため、ここでstudentsデータベースを作成するSQL文を実行します.
注:データベースを作成するSQL文のフィールドの順序は、Cursorクラスを使用してインデックスを使用してフィールド値を取得するときのインデックスの場所です.たとえば、studentsテーブルの最初のフィールドがidである場合、idのインデックス位置は0です.
二、
次にstudentクラスが学生情報を表すエンティティクラスを作成します.
public class Student {
public long id;
public String name;
public String tel_no;
public int cls_id;
}
次に、SQLiteDbHelperのgetWriteDatabase関数からデータベースの操作オブジェクトを取得する必要があります.コードは次のとおりです.
SQLiteDbHelper helper = new SQLiteDbHelper(getApplicationContext());
SQLiteDatabase database = helper.getWritableDatabase();
三、
3.1
studentsテーブルにいくつかのデータを挿入してみます.
public void insertStudents() {
for (int i = 0; i < 5; i++) {
ContentValues values = studentToContentValues(mockStudent(i));
mSQLiteDatabase.insert(SQLiteDbHelper.TABLE_STUDENT, null, values);
}
}
// student
private Student mockStudent(int i) {
Student student = new Student();
student.id = i;
student.name = "user-" + i;
student.tel_no = String.valueOf(new Random().nextInt(200000));
student.cls_id = new Random().nextInt(5);
return student;
}
// student ContentValues
private ContentValues studentToContentValues(Student student) {
ContentValues contentValues = new ContentValues();
contentValues.put("id", student.id);
contentValues.put("name", student.name);
contentValues.put("tel_no", student.tel_no);
contentValues.put("cls_id", student.cls_id);
return contentValues;
}
注:ContentValueに格納されているキーは、データベース内のフィールド名と一致する必要があります.ContentValueの値はフィールドの値です.
3.2
データを挿入したら、クエリー操作を試してみましょう.
private void queryStudents() {
// select * from students
Cursor cursor = mSQLiteDatabase.query(SQLiteDbHelper.TABLE_STUDENT, null,
"cls_id > ? and id >= 1", new String[]{"3"},
null, null, null, null);
//
while (cursor.moveToNext()) {
//
int stuId = cursor.getInt(0);
// name ,
String stuName = cursor.getString(cursor.getColumnIndex("name"));
Log.e("", "id: " + stuId + " name: " + stuName);
}
//
cursor.close();
}
注意:cls_idのタイプは整数ですが、パラメータ4は文字列値-new String[]{"3"}を与えます.ここで心配する必要はありません.SQLiteは最下位でタイプ変換を行い、パラメータ4の値をテーブルのフィールドに対応するタイプに変換します.
3.3
削除操作も同様です.
private void deleteStudents() {
mSQLiteDatabase.delete(SQLiteDbHelper.TABLE_STUDENT,
"cls = ?", new String[]{"3"});
}
3.4
更新操作のパラメータは、削除操作よりもContentValueが1つ多くなります.つまり、更新するフィールドキーの値のペアです.
private void updateStudents() {
ContentValues contentValues = new ContentValues();
contentValues.put("name", "Jerry");
mSQLiteDatabase.update(SQLiteDbHelper.TABLE_STUDENT,
contentValues, "cls_id = ?", new String[]{"3"});
}