📅  最后修改于: 2023-12-03 15:38:30.882000             🧑  作者: Mango
在Android应用程序中,数据存储是很常见的需求。一般而言,这些数据可以存储在文件系统、SQLite数据库或是云服务器中。针对会议室管理软件,我们可以使用SQLite数据库来存储会议室的信息。
下面的介绍将分为四个部分,涵盖了在Android的会议室数据库中执行CRUD操作的全部过程:
在Android中,我们使用SQLiteOpenHelper类来创建数据库并定义表的结构。下面是一个示例代码:
public class MeetingRoomOpenHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "meetingroom.db";
private static final int DATABASE_VERSION = 1;
public MeetingRoomOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MEETINGROOM_TABLE = "CREATE TABLE " + MeetingRoomContract.MeetingRoomEntry.TABLE_NAME + "("
+ MeetingRoomContract.MeetingRoomEntry._ID + " INTEGER PRIMARY KEY,"
+ MeetingRoomContract.MeetingRoomEntry.COLUMN_NAME + " TEXT,"
+ MeetingRoomContract.MeetingRoomEntry.COLUMN_CAPACITY + " INTEGER" + ")";
db.execSQL(CREATE_MEETINGROOM_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + MeetingRoomContract.MeetingRoomEntry.TABLE_NAME);
onCreate(db);
}
}
这段代码创建了一个名为meetingroom.db的数据库,其中包含了名为meetingroom的表。表中包含三个字段:id、name和capacity。
为了让我们的应用使用该数据库,我们需要在AndroidManifest.xml中添加以下内容:
<manifest ...>
<application ...>
<provider
android:name=".data.MeetingRoomProvider"
android:authorities="com.example.meetingroom.provider"
android:exported="false" />
</application>
</manifest>
其中,android:authorities属性指定了我们的应用程序的授权名称,也就是我们后面将使用的内容提供器的授权名称。
有了创建的表之后,我们就可以向其中插入数据了。下面是一个示例代码:
// 创建要被插入的数据
ContentValues values = new ContentValues();
values.put(MeetingRoomContract.MeetingRoomEntry.COLUMN_NAME, "room1");
values.put(MeetingRoomContract.MeetingRoomEntry.COLUMN_CAPACITY, 50);
// 在MeetingRoomProvider中插入数据
Uri uri = getContext().getContentResolver().insert(MeetingRoomContract.MeetingRoomEntry.CONTENT_URI, values);
本代码通过ContentValues对象创建出要被插入的数据,并调用ContentResolver.insert()方法将数据插入到我们创建的meetingroom表中。
在查询之前,我们需要明确查询的条件。下面是一个示例代码:
// 条件
String selection = MeetingRoomContract.MeetingRoomEntry.COLUMN_NAME + " = ?";
String[] selectionArgs = { "room1" };
// 查询数据
Cursor cursor = getContext().getContentResolver().query(
MeetingRoomContract.MeetingRoomEntry.CONTENT_URI, projection, selection, selectionArgs, sortOrder
);
此处,我们查询所有满足"名称为room1"的会议室信息。我们可以在查询完成后通过Cursor对象遍历结果集。下面是一个示例代码:
List<MeetingRoom> meetingRooms = new ArrayList<>();
while(cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndex(MeetingRoomContract.MeetingRoomEntry._ID));
String name = cursor.getString(cursor.getColumnIndex(MeetingRoomContract.MeetingRoomEntry.COLUMN_NAME));
int capacity = cursor.getInt(cursor.getColumnIndex(MeetingRoomContract.MeetingRoomEntry.COLUMN_CAPACITY));
MeetingRoom meetingRoom = new MeetingRoom(id, name, capacity);
meetingRooms.add(meetingRoom);
}
cursor.close();
这段代码将查询结果转化为MeetingRoom对象,方便我们进行操作。
我们可以使用ContentResolver.update()方法来更新和删除数据。下面是一个示例代码:
// 要更新的数据
ContentValues values = new ContentValues();
values.put(MeetingRoomContract.MeetingRoomEntry.COLUMN_CAPACITY, 60);
// 条件
String selection = MeetingRoomContract.MeetingRoomEntry.COLUMN_NAME + " = ?";
String[] selectionArgs = { "room1" };
// 更新数据
int count = getContext().getContentResolver().update(
MeetingRoomContract.MeetingRoomEntry.CONTENT_URI, values, selection, selectionArgs
);
// 删除数据
int count = getContext().getContentResolver().delete(
MeetingRoomContract.MeetingRoomEntry.CONTENT_URI, selection, selectionArgs
);
此处我们用ContentValues对象建立一个要更新的数据,然后在调用ContentResolver.update()方法时传入条件参数进行更新。
同样的,我们也可以使用ContentResolver.delete()方法来删除数据。
通过这篇文章的学习,我们理解了在Android会议室数据库中进行CRUD操作的基本思路。如果需要在其他地方进行操作,只需要根据这些基本的思路去封装相应的代码即可。