📜  如何在Android的会议室数据库中执行CRUD操作?(1)

📅  最后修改于: 2023-12-03 15:38:30.882000             🧑  作者: Mango

在Android的会议室数据库中执行CRUD操作

在Android应用程序中,数据存储是很常见的需求。一般而言,这些数据可以存储在文件系统、SQLite数据库或是云服务器中。针对会议室管理软件,我们可以使用SQLite数据库来存储会议室的信息。

下面的介绍将分为四个部分,涵盖了在Android的会议室数据库中执行CRUD操作的全部过程:

  1. 创建数据库及表结构
  2. 插入数据
  3. 查询数据
  4. 更新和删除数据
1. 创建数据库及表结构

在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属性指定了我们的应用程序的授权名称,也就是我们后面将使用的内容提供器的授权名称。

2. 插入数据

有了创建的表之后,我们就可以向其中插入数据了。下面是一个示例代码:

// 创建要被插入的数据
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表中。

3. 查询数据

在查询之前,我们需要明确查询的条件。下面是一个示例代码:

// 条件
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对象,方便我们进行操作。

4. 更新和删除数据

我们可以使用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操作的基本思路。如果需要在其他地方进行操作,只需要根据这些基本的思路去封装相应的代码即可。