0

在我的活动中,我需要调用以根据用户选择的数据库查询不同的数据库。我不想单独调用每个代码,而是希望有一个查询代码,并简单地从字符串值更改数据库的意图或类。基本上我需要将我的数据库名称引用从我的类“EmployeeDatabase”更改为用户当前选择的任何数据库。我需要将选定的字符串 x 设置为 y 类,然后让 y 类能够查询。我正在尽我所能解释,如果令人困惑,对不起。谢谢您的帮助!

不知何故,我需要能够将变量 y 设置为用户选择的任何类,然后能够像这样查询: c=db.query(y.EMP_TABLE4, null,null,null,null,null,null); 它说 EMP_TABLE4 无法解析或不是字段。

我的数据库现在如何仅使用一个数据库选项工作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.redlight2);

    EmployeeDatabase db=null;

    try{
    ListContent = (ListView)findViewById(R.id.listView1);

    db=new EmployeeDatabase(this);

    c=db.query(EmployeeDatabase.EMP_TABLE4, null,
            null,null,null,null,null);


            mydisplayadapter4 adapter = new mydisplayadapter4(this, c);
            ListContent.setAdapter(adapter);

    }
    catch(Exception e){System.out.println("problem");}

我希望它如何工作:

     String x;

Class<?> y;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.redlight2);

    String x = "my database class name";

    try {

        y = Class.forName(x);

    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }



    // I want to replace everything that says EmployeeDatabase with y

    EmployeeDatabase db=null;

    try{
    ListContent = (ListView)findViewById(R.id.listView1);

    db=new EmployeeDatabase(this);

    c=db.query(EmployeeDatabase.EMP_TABLE4, null,
            null,null,null,null,null);


            mydisplayadapter4 adapter = new mydisplayadapter4(this, c);// OWN ADAPTER
            ListContent.setAdapter(adapter);
4

1 回答 1

0

如果您想访问所有具有相同架构的各种数据库(从您的代码看来是这样),那么它应该非常简单。

  • 从 SQLiteOpenHelper 创建一个派生类。
  • 创建此对象时,请传递数据库名称。应用程序的其他部分不需要知道它正在使用什么数据库。
  • 还要确保将此类设为单例。因此,您可以通过关闭当前使用的数据库,然后打开新的数据库,轻松切换到其他数据库。
  • 当您从任何地方调用 getWritableDatabase() 进行数据库操作时,它将返回正确的数据库句柄。
于 2013-08-21T03:10:27.907 回答