关于android:从2个表SQLite数据库中填充listview

Populating listview from 2 tables SQLite database

我想从sqlite数据库中的两个表中填充一个listview。ListView将由3个视图组成:一个ImageView和2个TextView。< BR>

  • 第一张表:图像视图和文本视图1
  • 第二个表:文本视图2

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

下面的代码显示只有我的文件夹中的数据的列表视图。如何更改它,使textview1显示表my_folders中的数据,textview2显示表my_expenses中的数据。有人能帮忙吗?< BR>

这是我的主要任务:

public class mymain extends ListActivity {
ListView listContent;

SimpleCursorAdapter cursorAdapter;
final DBAdapter mySQLiteAdapter = new DBAdapter(this);
Cursor cursor;

/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {

1
  super.onCreate(savedInstanceState);

// setContentView(R.layout.list_example);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  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();

}
}

此我的数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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);
    }

从两个表中获取数据的最佳方法是使用join查询,类似于

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

这将返回1个光标中的所有数据,然后您可以将这些数据放入视图中。