【问题标题】:How to add a dynamic table in my pre-existing database after the main table?如何在主表之后在我预先存在的数据库中添加动态表?
【发布时间】:2020-10-10 09:34:59
【问题描述】:

我制作了这个数据库助手代码,以使表格能够使用以下代码将项目输入到列表中。 list 的表格包括 3 个属性,item_id、item_name 和 item_cost。

//Database Information
private static final String DATABASE_NAME = "budgetlist.db";
private static final int DATABASE_VERSION = 1;
//Table Name
public static final String TABLE_NAME = "List";
//Column Names
public static final String COL_ITEM_ID = "_id";
public static final String COL_ITEM_NAME = "item_name";
public static final String COL_ITEM_COST = "cost";
static final String[] columns = new String[]{DBhelper.COL_ITEM_ID,
        DBhelper.COL_ITEM_NAME,DBhelper.COL_ITEM_COST};


// creation SQLite statement
private static final String DATABASE_CREATE = "CREATE TABLE " + TABLE_NAME
        + "(" + COL_ITEM_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + COL_ITEM_NAME + " TEXT NOT NULL, " + COL_ITEM_COST + " INTEGER )";

但现在我必须在数据库中存储多个列表。因此,我使用相同的代码修改版本制作了另一个数据库代码,以启用包含属性 list_id、list_name、list_duration 和 list_budgetlimit 的列表表,并且我想使用表中创建的每个列表动态创建上述列表,但我是不确定它是如何工作的。 我目前正在使用并需要修改的代码如下:

//List Table Name
public static final String TABLE_LIST_NAME = "ListDetails";
//List Column Names
public static final String COL_LIST_ID = "_id";
public static final String COL_LIST_NAME = "item_name";
public static final String COL_LIST_DURATION = "dur";
public static final String COL_LIST_BLIMIT = "blimit";
static final String[] columns = new String[]{ListDBhelper.COL_LIST_ID,
        ListDBhelper.COL_LIST_NAME,ListDBhelper.COL_LIST_DURATION,ListDBhelper.COL_LIST_BLIMIT};
//Database Information
private static final String DATABASE_NAME = "budgetlist.db";
private static final int DATABASE_VERSION = 1;

// creation SQLite statement
private static final String DATABASE_CREATE = "CREATE TABLE " + TABLE_LIST_NAME
        + "(" + COL_LIST_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + COL_LIST_NAME + " TEXT NOT NULL, " + COL_LIST_DURATION + " TEXT, " + COL_LIST_BLIMIT + " INTEGER )";

public ListDBhelper(Context context1, String databaseName, Context context, int databaseVersion) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    System.out.println("DB Created");
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);
    System.out.println("Table Created");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIST_NAME);
    onCreate(db);
    System.out.println("DB Updated");
}

@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    onUpgrade(db, oldVersion, newVersion);
}

【问题讨论】:

  • 你能具体说明这里有什么问题吗?
  • 这里的问题是我不知道将同一个数据库中的两个表与第二个动态组合起来。

标签: android sqlite android-studio


【解决方案1】:

您可以使用数据库视图。它是由查询定义的数据库中的可搜索对象。尽管视图不存储数据,但有些人将视图称为“虚拟表”,您可以像查询表一样查询视图。视图可以使用连接组合来自两个或多个表的数据,也可以只包含信息的子集。这使它们便于抽象或隐藏复杂的查询。 Room 持久性库的 2.1.0 及更高版本提供对 SQLite 数据库视图的支持,允许您将查询封装到一个类中。 Room 将这些查询支持的类称为视图,在 DAO 中使用时它们的行为与简单数据对象相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2020-08-22
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2020-05-23
    相关资源
    最近更新 更多