SQLite の扱い方を理解しようとしています。次のクラスを持つメンバーデータベースがあります。
パッケージcom.appiclife.saldo.data;
public class Member {
private long id;
private String name;
private String phone;
private String email;
private int weight;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
次に、データベースを作成および更新するための次の HelperClass があります。
public class MemberSQLiteHelper extends SQLiteOpenHelper {
public static final String TABLE_MEMBERS = "members";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_PHONE = "phone";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_WEIGHT = "weight";
private static final String DATABASE_NAME = "members.db";
private static final int DATABASE_VERSION = 1;
// Database creation sql statement
private static final String DATABASE_CREATE =
"create table "
+ TABLE_MEMBERS + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_NAME + " text not null, "+
COLUMN_PHONE + " text, "+
COLUMN_EMAIL + " text, "+
COLUMN_WEIGHT + " integer);";
public MemberSQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MemberSQLiteHelper.class.getName(),
"Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBERS);
onCreate(db);
}
}
次の方法があります。
public class MembersDataSource {
// Database fields
private SQLiteDatabase database;
private MemberSQLiteHelper dbHelper;
private String[] allColumns = { MemberSQLiteHelper.COLUMN_ID,
MemberSQLiteHelper.COLUMN_NAME, MemberSQLiteHelper.COLUMN_PHONE, MemberSQLiteHelper.COLUMN_EMAIL, MemberSQLiteHelper.COLUMN_WEIGHT};
public MembersDataSource(Context context) {
dbHelper = new MemberSQLiteHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public Member createMember(String name, String phone, String email, int weight) {
ContentValues values = new ContentValues();
values.put(MemberSQLiteHelper.COLUMN_NAME, name);
values.put(MemberSQLiteHelper.COLUMN_PHONE, phone);
values.put(MemberSQLiteHelper.COLUMN_EMAIL, email);
values.put(MemberSQLiteHelper.COLUMN_WEIGHT, weight);
long insertId = database.insert(MemberSQLiteHelper.TABLE_MEMBERS, null, values);
Cursor cursor = database.query(MemberSQLiteHelper.TABLE_MEMBERS, allColumns, MemberSQLiteHelper.COLUMN_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
Member newMember = cursorToMember(cursor);
cursor.close();
return newMember;
}
public void deleteMember(Member member) {
long id = member.getId();
database.delete(MemberSQLiteHelper.TABLE_MEMBERS, MemberSQLiteHelper.COLUMN_ID
+ " = " + id, null);
}
public List<Member> getAllMembers() {
List<Member> members = new ArrayList<Member>();
Cursor cursor = database.query(MemberSQLiteHelper.TABLE_MEMBERS,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Member member = cursorToMember(cursor);
members.add(member);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return members;
}
private Member cursorToMember(Cursor cursor) {
Member member = new Member();
member.setId(cursor.getLong(0));
member.setName(cursor.getString(1));
member.setPhone(cursor.getString(2));
member.setEmail(cursor.getString(3));
member.setWeight(cursor.getInt(4));
return member;
}
}
そして質問は、
たとえば、すでに DB にあるメンバーの名前を変更するにはどうすればよいですか? (1)
また、たとえば、より多くの電話番号がある場合、Arraylist を保存することは可能ですか? (2)
また、データベースの行を削除すると、次の行の ID が変更されますか? または、同じメンバーを取得したい場合、常に同じ ID を参照できますか? 他の方法で、一度作成されたメンバーは同じ ID を保持しますか? (3)