从2个表SQLite数据库填充listview

时间:2012-06-11 06:38:31

标签: android sqlite android-listview

我想从SQLite数据库中的2个表填充listview。列表视图将包含3个视图:图像视图和2个文本视图。

  • 第一张表:imageview和textview1
  • 第二张表:textview2

我可以成功查询一个表中的数据并将其显示在列表视图中,但不知道如何从第二个查询,然后将其添加到列表中。

下面的代码显示的列表视图仅包含来自my_folders的数据。 如何更改它,使textview1显示表my_folders中的数据,textview2显示来自my_expenses的数据。有人可以帮忙吗?

这是我的主题:

  

public class mymain扩展ListActivity {     ListView listContent;

     

SimpleCursorAdapter cursorAdapter;     final DBAdapter mySQLiteAdapter = new DBAdapter(this);     光标光标;

     

/ **首次创建活动时调用。 * /

     

@覆盖     public void onCreate(Bundle savedInstanceState){

  super.onCreate(savedInstanceState);
     

// setContentView(R.layout.list_example);

  listContent = (ListView) findViewById(R.id.custom_list);
  final DBAdapter mySQLiteAdapter = new DBAdapter(this);

  mySQLiteAdapter.open();

  cursor = mySQLiteAdapter.getAllFolders();

  String[] from = new String[] { DBAdapter.KEY_NAME,DBAdapter.KEY_CURRENCY };
  int[] to = new int[] { R.id.name_row, R.id.notes_row };


  cursorAdapter = new SimpleCursorAdapter(this, R.layout.list_row, cursor,
          from, to);

  setListAdapter(cursorAdapter);
  mySQLiteAdapter.close();
     

}   }

这是我的数据库:

import android.database.Cursor;

public class DBAdapter {
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "name";
    public static final String KEY_CURRENCY = "currency";
    public static final String KEY_NOTES = "notes";
    public static final String KEY_EXPENSE_NAME = "expense_name";
    public static final String KEY_EXPENSE_AMOUNT = "expense_amount";
    public static final String KEY_EXPENSE_DATE = "expense_date";
    public static final String KEY_EXPENSE_TIME = "expense_time";
    public static final String KEY_EXPENSE_NOTES = "expense_notes";
    public static final String KEY_EFOLDERID = "e_fid";

    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "MyDB";
    private static final String DATABASE_TABLE1 = "my_folders";
    private static final String DATABASE_TABLE2 = "my_expenses";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE_FOLDERS = 
        "create table my_folders (_id integer primary key autoincrement, "
            + "name text not null, currency text not null, notes text);";

    private static final String DATABASE_CREATE_EXPENSES = 
        "create table my_expenses (_id integer primary key autoincrement, "
            + "expense_name text not null, expense_amount real not null, " +
                    "expense_date text not null, expense_time text not null," +
                    "expense_notes text,"
        + "e_fid integer not null," +
                    "FOREIGN KEY ("+ KEY_EFOLDERID+ ") REFERENCES " + DATABASE_TABLE1 +" ("+ >KEY_ROWID + ") ON DELETE CASCADE);";

    // ---retrieves all the contacts---
    public Cursor getAllFolders() {
        return db.query(DATABASE_TABLE1, new String[] { KEY_ROWID, KEY_NAME,
                KEY_CURRENCY, KEY_NOTES}, null, null, null, null, null);
    }

    // ---retrieves all the expenses---
    public Cursor getAllExpenses() {
        return db.query(DATABASE_TABLE2, new String[] { KEY_ROWID, KEY_EXPENSE_NAME,
                KEY_EXPENSE_AMOUNT, KEY_EXPENSE_DATE, KEY_EXPENSE_TIME, KEY_EXPENSE_NOTES, >KEY_EFOLDERID}, null, null, null, null, null);
    }

1 个答案:

答案 0 :(得分:1)

从2个表中获取数据的最佳方法是使用连接查询,例如

SELECT name, expense_name, expense_notes
FROM my_folders, my_expenses
WHERE my_folders._id = my_folders.e_fid

这将返回1 Cursor中的所有数据,然后您可以将其放入视图中