2011-12-19 9 views
2

私は4つの異なるデータベーステーブルのデータをアンドロイドに表示する必要があります。以前はテストのためにデータを表示するために単一テーブルを使用していました。そのために私は3つのファイルを作成しました。アンドロイドで複数のデータベーステーブルのデータにアクセスする方法は?

1)DBAdapter.java

2)UserBO.java

3)Test.java

DBAdapter.java

public class DBAdapter extends SQLiteOpenHelper { 

     private static String DB_PATH = ""; 
     private static final String DB_NAME = "mydb.sqlite"; 
     private SQLiteDatabase myDataBase1; 
     private final Context myContext1; 

     private static DBAdapter mDBConnection; 


     private DBAdapter(Context context) { 
      super(context, DB_NAME, null, 1); 
      this.myContext1 = context; 
      DB_PATH = "/data/data/" 
        + context.getApplicationContext().getPackageName() 
        + "/databases/"; 

     } 


     public static synchronized DBAdapter getDBAdapterInstance(Context context) { 
      if (mDBConnection == null) { 
       mDBConnection = new DBAdapter(context); 
      } 
      return mDBConnection; 
     } 


     public void createDataBase() throws IOException { 
      boolean dbExist = checkDataBase(); 
      if (dbExist) { 
       // do nothing - database already exist 
      } else { 
       // By calling following method 
       // 1) an empty database will be created into the default system path of your application 
       // 2) than we overwrite that database with our database. 
       this.getReadableDatabase(); 
       try { 
        copyDataBase(); 
       } catch (IOException e) { 
        throw new Error("Error copying database"); 
       } 
      } 
     } 


     private boolean checkDataBase() { 
      SQLiteDatabase checkDB = null; 
      try { 
       String myPath = DB_PATH + DB_NAME; 
       checkDB = SQLiteDatabase.openDatabase(myPath, null, 
         SQLiteDatabase.OPEN_READONLY); 

      } catch (SQLiteException e) { 
       // database does't exist yet. 
      } 
      if (checkDB != null) { 
       checkDB.close(); 
      } 
      return checkDB != null ? true : false; 
     } 


     private void copyDataBase() throws IOException { 
       // Open your local db as the input stream 
      InputStream myInput = myContext1.getAssets().open(DB_NAME); 
       // Path to the just created empty db 
      String outFileName = DB_PATH + DB_NAME; 
       // Open the empty db as the output stream 
      OutputStream myOutput = new FileOutputStream(outFileName); 
       // transfer bytes from the inputfile to the outputfile 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 
       // Close the streams 
      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 
     } 


     public void openDataBase() throws SQLException { 
      String myPath = DB_PATH + DB_NAME; 
      myDataBase1 = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);  
     } 


     @Override 
     public synchronized void close() { 
      if (myDataBase1 != null) 
       myDataBase1.close(); 
      super.close(); 
     } 


     @Override 
     public void onCreate(SQLiteDatabase db) { 
     } 


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


     public Cursor selectRecordsFromDB(String tableName, String[] tableColumns, 
       String whereClase, String whereArgs[], String groupBy, 
       String having, String orderBy) { 
      return myDataBase1.query(tableName, tableColumns, whereClase, whereArgs, 
        groupBy, having, orderBy); 
     } 


     public ArrayList<ArrayList<String>> selectRecordsFromDBList(String tableName, String[] tableColumns, 
       String whereClase, String whereArgs[], String groupBy, 
       String having, String orderBy) {   

      ArrayList<ArrayList<String>> retList = new ArrayList<ArrayList<String>>(); 
       ArrayList<String> list = new ArrayList<String>(); 
       Cursor cursor = myDataBase1.query(tableName, tableColumns, whereClase, whereArgs, 
         groupBy, having, orderBy);   
       if (cursor.moveToFirst()) { 
       do { 
        list = new ArrayList<String>(); 
        for(int i=0; i<cursor.getColumnCount(); i++){     
         list.add(cursor.getString(i)); 
        } 
        retList.add(list); 
       } while (cursor.moveToNext()); 
       } 
       if (cursor != null && !cursor.isClosed()) { 
       cursor.close(); 
       } 
       return retList; 

     } 

     public Cursor selectRecordsFromDB(String query, String[] selectionArgs) { 
      return myDataBase1.rawQuery(query, selectionArgs);  
     } 


     public ArrayList<ArrayList<String>> selectRecordsFromDBList(String query, String[] selectionArgs) {  
       ArrayList<ArrayList<String>> retList = new ArrayList<ArrayList<String>>(); 
       ArrayList<String> list = new ArrayList<String>(); 
       Cursor cursor = myDataBase1.rawQuery(query, selectionArgs);   
       if (cursor.moveToFirst()) { 
       do { 
        list = new ArrayList<String>(); 
        for(int i=0; i<cursor.getColumnCount(); i++){     
         list.add(cursor.getString(i)); 
        } 
        retList.add(list); 
       } while (cursor.moveToNext()); 
       } 
       if (cursor != null && !cursor.isClosed()) { 
       cursor.close(); 
       } 
       return retList; 
      } 

    } 

**UserBO.java** 
    public class UserBO { 
     int sid; 
     String sname; 
     public int getsid() { 
      return sid; 
     } 
     public void setsid(int sid) { 
      this.sid = sid; 
     } 

     public String getsname() { 
      return sname; 
     } 
     public void setsname(String sname) { 
      this.sname= sname; 
     } 
    } 

Test.java

public class Select extends Activity { 

     private Header header; 
     private ListView lvUsers; 
     private ArrayList<UserBO> mListUsers; 
     private SharedPreferences mPreferences1; 
     private SharedPreferences mPreferences2; 
     String myString1,query; 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      System.out.println("before k select "+k); 
      setContentView(R.layout.select); 

      header = (Header) findViewById(R.id.layoutHeader); 

      mListUsers = getUsers(); 

      lvUsers = (ListView) findViewById(R.id.lv_user); 
      lvUsers.setAdapter(new ListAdapter(this, R.id.lv_user, mListUsers)); 
     } 

     public ArrayList<UserBO> getUsers(){     

      DBAdapter dbAdapter=DBAdapter.getDBAdapterInstance(this); 
      try { 
       dbAdapter.createDataBase(); 
      } catch (IOException e) { 
       Log.i("*** select ",e.getMessage()); 
      } 

      mPreferences1 = getSharedPreferences("CurrentUser1", 0); 
      myString1 = mPreferences1.getString("student id",sid); 

      dbAdapter.openDataBase(); 

    **query="SELECT tabel1.*, tabel2.* FROM tabel1, tabel2 WHERE tabel1.PK=tabel2.FK;";** 

     ArrayList<ArrayList<String>> stringList = dbAdapter.selectRecordsFromDBList(query, null); 
      dbAdapter.close(); 
      ArrayList<UserBO> usersList = new ArrayList<UserBO>(); 

      for (int i = 0; i < stringList.size(); i++) { 
       ArrayList<String> list = stringList.get(i); 
       UserBO user = new UserBO(); 
       AppConstants.alConductedQuestions.add(user); 
       System.out.println("mListUsers"); 
        System.out.println(user); 
       try { 
        user.sid = Integer.parseInt(list.get(0)); 
        user.sname = list.get(1); 
       } 
        catch (Exception e) { 
        Log.i("***" + Test.class.toString(), e.getMessage()); 
       } 
       usersList.add(user); 

      } 


      return usersList; 

     } 



     // ***ListAdapter*** 
     private class ListAdapter extends ArrayAdapter<UserBO> { // --CloneChangeRequired 
      private ArrayList<UserBO> mList; // --CloneChangeRequired 
      private Context mContext; 

      public ListAdapter(Context context, int textViewResourceId,ArrayList<UserBO> list) { // --CloneChangeRequired 
       super(context, textViewResourceId, list); 
       //System.out.println(list); 
       this.mList = list; 
       this.mContext = context; 


      } 

      public View getView(int position, View convertView, ViewGroup parent){ 
       View view = convertView; 
       try{ 
       if (view == null) { 
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = vi.inflate(R.layout.list_item, null); 
        // --CloneChangeRequired(list_item) 
       } 
       final UserBO listItem = mList.get(position); // --CloneChangeRequired     
       if (listItem != null) { 
        // setting list_item views  

        ((TextView) view.findViewById(R.id.casedescription)).setText(listItem.getsid()+""); 
        ((TextView) view.findViewById(R.id.tv_question)).setText(listItem.getsname()+""); 
        ArrayList<UserBO> mList1; 



       } 
       } 
       catch(Exception e){ 

        String err = (e.getMessage()==null)?"hii":e.getMessage(); 
        Log.e("sdcard-err2:",err); 

       } 
       return view; 



      } 
      } 
     } 

test.javaで私はクエリを書いています。 UserBOでは、私はsetterとgetterメソッドを書いています。 DBAdapterファイルで、私はデータベース名について言及しています。だからここで私の質問は私のデータベースに4つのテーブルがあります。だから私はそれらのテーブルを使ってデータを表示する必要があります。 すべてのテーブルのカラム名のsetterメソッドとgetterメソッドを1つのUserBOファイルに記述しますか?

また、私は
をuser.sid = Integer.parseInt(list.get(0))を与えることによって、単一のテーブルの各列の値を取得しています。 user.sname = list.get(1); * すべてのテーブルの列名を取得するにはどうすればよいですか? * 私は、Test.javaファイル内のすべてのテーブルのすべての列を取得する必要がありますか? 使用すると、1つのデータベース& 3つのテーブルまたはすべての3つのテーブルを持っているアドバンス

で おかげ

答えて

0

.....私はこの異なるテーブルと、それは混乱しています....このについての私を助けてくださいは異なるdatabsaesにいますか?

関連する問題