【问题标题】:Create sqlite tables dynamically动态创建 sqlite 表
【发布时间】:2017-02-25 01:59:07
【问题描述】:

我的代码正在创建一个 sqlite 表,该表在单击添加按钮时保存输入数据,我想要做的是每次单击按钮 NewTab 时都会创建一个新表,我到处搜索并我也尝试了 sharedpreferences 来制作不同的表格名称,这对我没有任何帮助,任何人都可以帮助 plz,谢谢。

public class MyDBHandler extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "Shopping.db";
public static final String TABLE_NAME = "Main_table";

public static final String COL_2 = "NAME";
public static final String COL_3 = "PRICE";

public MyDBHandler(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PRICE TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
    onCreate(db);
}

public boolean insertData(String name,String price) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2,name);
    contentValues.put(COL_3,price);
    long result = db.insert(TABLE_NAME,null ,contentValues);
    if(result == -1)
        return false;
    else
        return true;
}

public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
    return res;
}

}

MainActivity

    btnAddData.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        MyDBHandler myDb = new MyDBHandler(MainActivity.this);
                        boolean isInserted = myDb.insertData(editName.getText().toString(), null);
                        if (isInserted == true) {
                            Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_LONG).show();
                            Cursor res = myDb.getAllData();

                            while (res.moveToNext()) {
                                final TextView textView = new TextView(MainActivity.this);

                                String valor1 = "<p style='font-family:verdana'>" + a + "</p> ";
                                textView.setText(Html.fromHtml(valor1));
                                lin.addView(textView);



                            }


                        } else {
                            Toast.makeText(MainActivity.this, "Data not Inserted", Toast.LENGTH_LONG).show();
                        }
                    }
                }
        );

【问题讨论】:

  • 如果你想在每次按下按钮时创建一个新表,你应该运行一个查询来删除旧表,或者每次通过添加一个随机数给它一个新名称(您不能创建具有相同名称的新表)。我仍然不建议重新创建表,您可以从中擦除数据。
  • 从您的问题中不清楚您为什么要创建一个新表。你能详细解释一下你想在这里完成什么吗?
  • 感谢您的回复,我试图更改表的名称,但由于我第一次使用 sqlite,所以我没有让它正确。我不能放弃它,因为最后我需要检索所有表格。我的主要目标是在用户每次点击按钮时创建一个列表,然后他输入将保存在该列表中的数据,如待办事项列表应用程序

标签: android sqlite dynamic onclick


【解决方案1】:

创建一个你通过sharedPreferences保存的变量这是你的table count然后创建一个sql数据库然后做

SQLDATABASENAME.execSql("CREATE TABLE Table" + your_counter_variable_ + " #create rows here ;");

【讨论】:

  • 我像你说的那样使用了 shareprefrences 但我遇到了一个问题,我在 mainActivity 中创建了 var 以在单击按钮时递增,但是当我在创建新数据库时检索此 var 时会产生错误跨度>
【解决方案2】:

您也可以使用实际时间来获取所有表的唯一 ID

【讨论】:

  • 我也用过,但是没有插入数据。请问我可以用在线数据库实现我的目标吗??
猜你喜欢
  • 2021-11-01
  • 2021-05-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
相关资源
最近更新 更多