学习笔记
一、创建 DabaseHelper 继承 SQLiteOpenHelper
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
二、写入数据库名称,表名,列名
public class DatabaseHelper extends SQLiteOpenHelper {
// 数据库名称
private static final String DATABASE_NAME = "mydatapase.dp";
// 数据库版本
private static final int DATABASE_VERSION = 1;
// 表名和列名常量
private static final String TABLE_NAME = "fodd"; // 食物表的名称
private static final String COLUMN_SCHEDULE_ID = "id"; // ID列
private static final String COLUMN_SCHEDULE_FOODNAME = "foodName"; // 食物名称列
private static final String COLUMN_SCHEDULE_FOODDESCRIBES = "foodDescribes"; // 食物描述列
// 创建数据库时调用,创建表结构
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表的SQL语句
String CREATE_SCHEDUL_TABEL = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_SCHEDULE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_SCHEDULE_FOODNAME + " TEXT, "
+ COLUMN_SCHEDULE_FOODDESCRIBES + " TEXT"
+ ")";
// 执行创建表的SQL语句
db.execSQL(CREATE_SCHEDUL_TABEL);
}
// 数据库版本更新时调用,处理表的升级
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 如果表存在,则删除旧表
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
// 重新创建新表
onCreate(db);
}
}
三、插入数据方法
// 插入数据到数据库表
public void insertFoodList(String foodname, String fooddescribes) {
// 获取可写数据库
SQLiteDatabase db = this.getWritableDatabase();
// 创建ContentValues对象用于存储要插入的值
ContentValues values = new ContentValues();
values.put(COLUMN_SCHEDULE_FOODNAME, foodname); // 存储食物名称
values.put(COLUMN_SCHEDULE_FOODDESCRIBES, fooddescribes); // 存储食物描述
// 插入数据到表中
db.insert(TABLE_NAME, null, values);
// 关闭数据库连接
db.close();
}
四、查询数据方法
public List<FoodItem> getAllFoods() {
// 创建一个空的食物列表,用于存储查询结果
List<FoodItem> foodList = new ArrayList<>();
// 获取可读数据库
SQLiteDatabase db = this.getReadableDatabase();
// 执行查询,获取表中所有记录
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
// 检查游标是否指向结果集的第一条记录
if (cursor.moveToFirst()) {
// 遍历结果集
do {
// 获取食物名称和描述
String foodName = cursor.getString(cursor.getColumnIndex(COLUMN_SCHEDULE_FOODNAME));
String foodDescribes = cursor.getString(cursor.getColumnIndex(COLUMN_SCHEDULE_FOODDESCRIBES));
// 创建 FoodItem 对象并添加到列表中
foodList.add(new FoodItem(foodName, foodDescribes));
} while (cursor.moveToNext()); // 移动到下一条记录
}
// 关闭游标,释放资源
cursor.close();
// 关闭数据库连接
db.close();
// 返回包含所有食物的列表
return foodList;
}
五、更新数据方法
public void updateFood(int id, String newFoodName, String newFoodDescribes) {
// 获取可写数据库实例
SQLiteDatabase db = this.getWritableDatabase();
// 创建ContentValues对象,用于存储要更新的值
ContentValues values = new ContentValues();
values.put(COLUMN_SCHEDULE_FOODNAME, newFoodName); // 存储新的食物名称
values.put(COLUMN_SCHEDULE_FOODDESCRIBES, newFoodDescribes); // 存储新的食物描述
// 执行更新操作
db.update(TABLE_NAME, values, COLUMN_SCHEDULE_ID + " = ?", new String[]{String.valueOf(id)});
// 关闭数据库连接
db.close();
}
六、删除数据方法
// 根据ID删除数据
public void deleteFoodList(int id) {
// 获取可写数据库
SQLiteDatabase db = this.getWritableDatabase();
// 根据ID删除对应的行
db.delete(TABLE_NAME, COLUMN_SCHEDULE_ID + "=?", new String[]{String.valueOf(id)});
// 关闭数据库连接
db.close();
}
七、查数据是否存在方法
public boolean isFoodExists(String foodName) {
// 获取可读数据库实例
SQLiteDatabase db = this.getReadableDatabase();
// 执行查询,检查指定名称的食物是否存在
Cursor cursor = db.query(
TABLE_NAME, // 表名
new String[]{COLUMN_SCHEDULE_FOODNAME}, // 要查询的列
COLUMN_SCHEDULE_FOODNAME + "=?", // 查询条件
new String[]{foodName}, // 查询条件的参数
null, null, null // 其他参数(分组、过滤、排序等)
);
// 检查结果集的行数,如果大于0则表示存在
boolean exists = (cursor.getCount() > 0);
// 关闭游标和数据库连接,以释放资源
cursor.close();
db.close();
// 返回食物是否存在的结果
return exists;
}