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个光标中的所有数据,然后您可以将这些数据放入视图中。