当你需要进行更多复杂的数据库操作时,例如查询、更新、删除等,SQLite 提供了更多灵活的方法。以下是一个扩展示例,演示如何执行这些操作。

更新 DBManager 类:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class DBManager {

    private DBHelper dbHelper;
    private SQLiteDatabase database;

    public DBManager(Context context) {
        dbHelper = new DBHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public long insertUser(String username, int age) {
        ContentValues values = new ContentValues();
        values.put(DBHelper.COLUMN_USERNAME, username);
        values.put(DBHelper.COLUMN_AGE, age);

        return database.insert(DBHelper.TABLE_NAME, null, values);
    }

    public Cursor getAllUsers() {
        String[] columns = {DBHelper.COLUMN_ID, DBHelper.COLUMN_USERNAME, DBHelper.COLUMN_AGE};
        return database.query(DBHelper.TABLE_NAME, columns, null, null, null, null, null);
    }

    public Cursor getUserById(long userId) {
        String[] columns = {DBHelper.COLUMN_ID, DBHelper.COLUMN_USERNAME, DBHelper.COLUMN_AGE};
        String selection = DBHelper.COLUMN_ID + " = ?";
        String[] selectionArgs = {String.valueOf(userId)};

        return database.query(DBHelper.TABLE_NAME, columns, selection, selectionArgs, null, null, null);
    }

    public int updateUser(long userId, String newUsername, int newAge) {
        ContentValues values = new ContentValues();
        values.put(DBHelper.COLUMN_USERNAME, newUsername);
        values.put(DBHelper.COLUMN_AGE, newAge);

        String whereClause = DBHelper.COLUMN_ID + " = ?";
        String[] whereArgs = {String.valueOf(userId)};

        return database.update(DBHelper.TABLE_NAME, values, whereClause, whereArgs);
    }

    public int deleteUser(long userId) {
        String whereClause = DBHelper.COLUMN_ID + " = ?";
        String[] whereArgs = {String.valueOf(userId)};

        return database.delete(DBHelper.TABLE_NAME, whereClause, whereArgs);
    }
}

在这个扩展的例子中,我们添加了几个新的方法:

  •  getUserById: 通过用户 ID 查询单个用户的数据。

  •  updateUser: 更新用户数据。

  •  deleteUser: 删除用户数据。


在 Activity 中使用:
import android.database.Cursor;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private DBManager dbManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbManager = new DBManager(this);

        try {
            dbManager.open();

            // 插入用户数据
            long userId1 = dbManager.insertUser("Alice", 25);
            long userId2 = dbManager.insertUser("Bob", 30);

            // 获取所有用户数据
            Cursor allUsersCursor = dbManager.getAllUsers();
            displayUserData("All Users:", allUsersCursor);

            // 获取单个用户数据
            Cursor userByIdCursor = dbManager.getUserById(userId1);
            displayUserData("User by ID:", userByIdCursor);

            // 更新用户数据
            dbManager.updateUser(userId1, "Updated Alice", 26);

            // 获取更新后的用户数据
            Cursor updatedUserCursor = dbManager.getUserById(userId1);
            displayUserData("Updated User:", updatedUserCursor);

            // 删除用户数据
            dbManager.deleteUser(userId2);

            // 获取删除后的用户数据
            Cursor usersAfterDeleteCursor = dbManager.getAllUsers();
            displayUserData("Users after Delete:", usersAfterDeleteCursor);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            dbManager.close();
        }
    }

    private void displayUserData(String title, Cursor cursor) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(title).append("\n");

        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex(DBHelper.COLUMN_ID));
            String username = cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_USERNAME));
            int age = cursor.getInt(cursor.getColumnIndex(DBHelper.COLUMN_AGE));

            stringBuilder.append("ID: ").append(id).append(", ")
                    .append("Username: ").append(username).append(", ")
                    .append("Age: ").append(age).append("\n");
        }

        TextView textView = findViewById(R.id.textView);
        textView.append(stringBuilder.toString());
    }
}

在这个例子中,我们打开了数据库连接,并执行了插入、查询、更新和删除操作,最后关闭了数据库连接。请注意,由于数据库操作可能会涉及到 I/O 操作,因此最好在后台线程执行,以避免阻塞主线程。这里为了简洁性,仍然在主线程执行。在实际应用中,你可能需要使用异步任务或其他机制来执行数据库操作。


转载请注明出处:http://www.pingtaimeng.com/article/detail/15190/Android