package vn.utt.sotay; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import java.util.List; public final class PlaceStore extends SQLiteOpenHelper { private static final String TABLE = "place"; public PlaceStore(Context context) { super(context.getApplicationContext(), "places.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE place (" + "_id INTEGER PRIMARY KEY," + "name TEXT NOT NULL CHECK(length(trim(name)) > 0)," + "area TEXT NOT NULL CHECK(length(trim(area)) > 0))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { throw new IllegalStateException("Thiếu migration " + oldVersion + " -> " + newVersion); } public long add(String name, String area) { return getWritableDatabase().insertOrThrow(TABLE, null, values(name, area)); } public List findByArea(String area) { List result = new ArrayList<>(); String[] columns = {"_id", "name", "area"}; try (Cursor cursor = getReadableDatabase().query(TABLE, columns, "area = ?", new String[]{required(area)}, null, null, "name, _id")) { while (cursor.moveToNext()) { result.add(new Place(cursor.getLong(0), cursor.getString(1), cursor.getString(2))); } } return result; } public boolean update(long id, String name, String area) { return getWritableDatabase().update(TABLE, values(name, area), "_id = ?", new String[]{Long.toString(id)}) == 1; } public boolean remove(long id) { return getWritableDatabase().delete(TABLE, "_id = ?", new String[]{Long.toString(id)}) == 1; } public void addAll(List places) { SQLiteDatabase db = getWritableDatabase(); db.beginTransaction(); try { for (Place place : places) { db.insertOrThrow(TABLE, null, values(place.name, place.area)); } db.setTransactionSuccessful(); } finally { db.endTransaction(); } } private static ContentValues values(String name, String area) { ContentValues values = new ContentValues(); values.put("name", required(name)); values.put("area", required(area)); return values; } private static String required(String value) { if (value == null || value.trim().isEmpty()) { throw new IllegalArgumentException("Tên và khu vực không được để trống"); } return value.trim(); } public static final class Place { public final long id; public final String name; public final String area; public Place(long id, String name, String area) { this.id = id; this.name = name; this.area = area; } } }