当前位置:首页 > 行业动态 > 正文

Android表格填充数据库,如何高效实现数据持久化?

步骤,1. 创建数据库和表:在 Android 中使用 SQLiteOpenHelper 类创建 数据库和表。,2. 插入数据:使用 ContentValues 和 insert 方法将数据插入表中。,3. 查询数据:使用 query 方法从表中检索数据并填充到表格中。

在Android应用开发中,表格布局是一种常见的用户界面设计方式,用于展示结构化的数据,为了实现动态填充表格布局的数据,通常需要结合数据库来存储和管理数据,以下是关于如何在Android中使用表格布局并填充数据库数据的详细步骤和示例代码。

使用SQLite数据库填充表格布局

创建数据库和表

1、创建或打开数据库:使用SQLiteOpenHelper类来创建或打开一个SQLite数据库。

2、创建表:在onCreate方法中执行SQL语句来创建所需的表。

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTableSql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
        db.execSQL(createTableSql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Handle database upgrade
    }
}

插入数据

在数据库创建后,可以向表中插入数据。

public void insertUser(String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("name", name);
    contentValues.put("age", age);
    db.insert("users", null, contentValues);
    db.close();
}

查询数据并填充表格布局

1、查询数据:从数据库中查询数据。

Android表格填充数据库,如何高效实现数据持久化?

2、动态创建表格行:根据查询结果动态创建TableRowTextView,并将其添加到TableLayout中。

public void populateTable() {
    TableLayout tableLayout = findViewById(R.id.tableLayout);
    tableLayout.removeAllViews(); // Clear previous data
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query("users", null, null, null, null, null, null);
    while (cursor.moveToNext()) {
        int id = cursor.getInt(cursor.getColumnIndex("id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        int age = cursor.getInt(cursor.getColumnIndex("age"));
        TableRow tableRow = new TableRow(this);
        TextView idTextView = new TextView(this);
        idTextView.setText(String.valueOf(id));
        TextView nameTextView = new TextView(this);
        nameTextView.setText(name);
        TextView ageTextView = new TextView(this);
        ageTextView.setText(String.valueOf(age));
        tableRow.addView(idTextView);
        tableRow.addView(nameTextView);
        tableRow.addView(ageTextView);
        tableLayout.addView(tableRow);
    }
    cursor.close();
    db.close();
}

更新和删除数据

可以使用类似的方法来更新和删除数据库中的数据。

public void updateUser(int id, String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("name", name);
    contentValues.put("age", age);
    db.update("users", contentValues, "id = ?", new String[]{String.valueOf(id)});
    db.close();
}
public void deleteUser(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete("users", "id = ?", new String[]{String.valueOf(id)});
    db.close();
}

使用Room库填充表格布局(推荐)

Room是Android推荐的持久化库,它提供了更高层次的抽象和更简单的API,以下是使用Room库的步骤。

添加依赖项

build.gradle文件中添加Room库的依赖项。

Android表格填充数据库,如何高效实现数据持久化?

dependencies {
    implementation "androidx.room:room-runtime:2.4.3"
    kapt "androidx.room:room-compiler:2.4.3"
}

定义实体类

定义与数据库表对应的实体类。

@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String name;
    private int age;
}

定义DAO接口

定义数据访问对象(DAO)接口,包含基本的CRUD操作。

@Dao
public interface UserDao {
    @Insert
    void insert(User user);
    @Update
    void update(User user);
    @Delete
    void delete(User user);
    @Query("SELECT  FROM users")
    List<User> getAllUsers();
}

创建数据库类

创建继承自RoomDatabase的抽象类,并定义数据库模式和DAO。

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

使用Room填充表格布局

1、获取数据库实例:通过Room.databaseBuilder获取数据库实例。

Android表格填充数据库,如何高效实现数据持久化?

2、查询数据并填充表格:与使用SQLite类似,但更加简洁。

public void populateTable() {
    TableLayout tableLayout = findViewById(R.id.tableLayout);
    tableLayout.removeAllViews(); // Clear previous data
    AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "mydatabase").build();
    List<User> users = db.userDao().getAllUsers();
    for (User user : users) {
        TableRow tableRow = new TableRow(this);
        TextView idTextView = new TextView(this);
        idTextView.setText(String.valueOf(user.getId()));
        TextView nameTextView = new TextView(this);
        nameTextView.setText(user.getName());
        TextView ageTextView = new TextView(this);
        ageTextView.setText(String.valueOf(user.getAge()));
        tableRow.addView(idTextView);
        tableRow.addView(nameTextView);
        tableRow.addView(ageTextView);
        tableLayout.addView(tableRow);
    }
}

介绍了两种在Android中使用表格布局并填充数据库数据的方法:使用原生的SQLite数据库和使用Room库,使用SQLite可以直接操作数据库,适合对数据库操作有更多控制需求的场景;而使用Room则更加简洁和现代化,适合快速开发和减少样板代码,选择哪种方法取决于具体项目的需求和开发者的偏好。