2013-08-21 3 views
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); 

ответ

0

Если вы хотите получить доступ к различным базам данных со всеми имеющих одинаковую схему (из вашего кода кажется, что это так), тогда это должно быть очень просто.

  • Сделать производный класс из SQLiteOpenHelper.
  • При создании этого объекта передайте имя базы данных. Другим частям приложения не нужно знать, какую базу данных он использует.
  • Также убедитесь, что этот класс является одноэлементным. Таким образом, вы можете легко переключиться на другую базу данных, закрыв используемую в данный момент, а затем открыв новую.
  • Когда вы вызываете getWritableDatabase() для операций с базой данных из любого места, он вернет правильный дескриптор db.
+0

Благодарим за помощь, однако я не понимаю, как правильно это сделать. Я довольно новичок в этом. Любой простой способ вызова класса из сменной переменной? – Cgramme

+0

Я понял. Я изменяю DATABASE_NAME со сменной строкой из sharedpreferences. ... Кажется, работает очень хорошо. – Cgramme

Смежные вопросы