【问题标题】:Dynamically creating SQLite table with defined rows动态创建具有已定义行的 SQLite 表
【发布时间】:2016-03-17 12:41:36
【问题描述】:

我希望将我的应用设置为根据用户输入动态创建表格。但我想为表定义一个结构,用户基本上会为表命名。

例如,我希望用户定义他们想要的表的名称,但所有表的行数和行名都相同,他们将通过另一个设置选项填写。

这是我的数据库,我目前有两个表,我需要更改其中 menucategory 表将是用户创建的表,而 menuitem 表将是该类别表的列

公共类 DatabaseHandler 扩展 SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
protected static final String DATABASE_NAME = "Store";
private static final String sqlcat ="menucategory";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String sql = "CREATE TABLE menuitem " +
            "( id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name TEXT, " +
            "description TEXT, "+
            "price int, "+
            "cost int, "+
            "cat TEXT)";

    db.execSQL(sql);

    String sqlcat = "CREATE TABLE menucategory " +
            "( id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name TEXT)";

    db.execSQL(sqlcat);

}

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

    String sql = "DROP TABLE IF EXISTS menuitem";
    db.execSQL(sql);

    onCreate(db);

    String sqlcat = "DROP TABLE IF EXISTS menucategory";

    onCreate(db);
}

/**
 * Getting all names
 * returns list of mobile name
 * */
public List<String> getAllNames(){
    List<String> names = new ArrayList<String>();

    // Select All Query
    String selectQuery = "SELECT  * FROM " + sqlcat;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            names.add(cursor.getString(1));
        } while (cursor.moveToNext());
    }

    // closing connection
    cursor.close();
    db.close();

    // returning names
    return names;
}

}

【问题讨论】:

  • 您应该向我们展示您尝试过的内容...同时解释为什么它不起作用或询问您如何使它变得更好。没有代码的问题通常会被否决而不回答
  • 所有的表都是通过代码在android中动态创建的(除非你复制DB)......你只需从用户那里读取表名并将其作为参数传递。
  • 同意@royB。和 Jenova 你只需要动态创建表吗???
  • 我的问题是我不确定从哪里开始@royB,这就是为什么没有代码,我原本想做一些不起作用的事情,所以这是一种新方法。没有代码 = 不知道从哪里开始。感谢 Viswanath Lekshmanan 的洞察力
  • 向我们展示创建数据库的代码...这将是一个好的开始...我们将帮助您使其动态...

标签: android sqlite


【解决方案1】:

我不知道你做了什么,但是为了动态创建表我使用了这个函数。

public void createUserTable(String tableName) {
    final SQLiteDatabase db = getWritableDatabase();
    String CREATE_TABLE_NEW_USER = "CREATE TABLE " + tableName + " (" + COLUMN_ID + " INTEGER PRIMARY KEY,"+ COLUMN_NAME + " TEXT)";
    db.execSQL(CREATE_TABLE_NEW_USER);
    db.close();
}

在你的 cmets 之后,这是一个答案 ....

String TABLE_MENU_ITEM_LIST = "MenuItemList";  // change as per your requirement 
String CREATE_TABLE_NEW_MENU_CATEGORY = "CREATE TABLE " + TABLE_MENU_ITEM_LIST + " ( ID INTEGER PRIMARY KEY,MenuItemName TEXT )";

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(TABLE_MENU_ITEM_LIST);
}

public void addNewMenuInList(String menuCategoryName) {  // First enter you menu name in MenuItem List
    final SQLiteDatabase db = getWritableDatabase();
    final ContentValues contentValues = new ContentValues();
    contentValues.put(MENU_CATEGORY_NAME, menuCategoryName);
    int i = (int) db.insert(TABLE_MENU_ITEM_LIST, null, contentValues);
    db.close();
    //Now create new table for this category
    if (i > 0) {
        createNewMenuCategoryTable(menuCategoryName);
    }
}

public void createNewMenuCategoryTable(String menuItemName) {
    final SQLiteDatabase db = getWritableDatabase();
    // change your column datatype as per your requirement for price and coast
    String CREATE_TABLE_NEW_MENU_CATEGORY = "CREATE TABLE " + menuItemName + " ( ID INTEGER PRIMARY KEY,Name TEXT,Description TEXT,ImagePath TEXT,Price TEXT,Coast TEXT )";

    db.execSQL(CREATE_TABLE_NEW_MENU_CATEGORY);
    db.close();
}
enter code here

【讨论】:

  • 感谢帮助,这个是放在dbhelper类里的吗
  • 很抱歉,我是 android 新手,在 sqlite 方面真的很新。你能给我看一个你在活动中添加的列的例子吗?只是想知道如何添加列。谢谢
  • 别担心!我总是乐于助人。您正在创建哪个表?以及您要添加多少列?您要添加哪一列??
  • 所以我需要创建用户将为其命名的 menucategory 表。我需要 5 列。基本上所有的 menuitem 表都将成为 menucategory 的列
  • 如果所有表的列都相同,那么可以。
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多