Ich schreibe einen RSS-Reader für Android. Ich habe mit einer gewissen Schwierigkeit konfrontiert, die das Problem nicht lösen kann, da Datenbanken nicht meine Expertise sind. Also habe ich herausgefunden, dass vielleicht einer von euch mir helfen könnte! Ich habe derzeit 3 Tabellen (Kategorien, Links und Feeds). Mein Ziel ist es, einen Feed mit mehreren Kategorien zu verknüpfen. Daher verwende ich eine Link-Tabelle. Meine Datenbanken ist ein Android-Contentprovider (SQLite) und sieht wie folgt aus:Android ContentProvider Datenbank Abfrage mehrere Tabellen
| Categories | | Links | | Feeds |
|------------| |---------| |-------|
| _ID | | Category| | _ID |
| Title | | Feed | | Title |
| URL |
ich zur Zeit den folgenden Code in meinem FeedListActivity schrieb eine Liste von Links und deren Feeds abzurufen.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//gets the intent URI to retrieve the Feeds.
Intent intent = getIntent();
if (intent.getData() == null) {
intent.setData(Feeds.CONTENT_URI);
}
// stores the Category id so it knows from what category it came from
mCatId = intent.getIntExtra("catId", -1);
getListView().setOnCreateContextMenuListener(this);
// gets all Links that have the category placed
Cursor links = managedQuery(
Links.CONTENT_URI,
NewsReadUtils.LINK_PROJECTION_STRING,
Links.CATEGORY+ " = "+ mCatId, null, null);
String query = "";
Cursor cursor = null;
if(links.getCount()>0){
// if there are links available try to get them and build a query.
links.moveToFirst();
do{
if (links.isFirst()) {
query = Feeds._ID+ " = "+links.getString(links.getColumnIndex(Links.FEED));
}else{
query += " OR " +Feeds._ID+ " = "+links.getString(links.getColumnIndex(Links.FEED));
}
}while(links.moveToNext());
cursor = managedQuery(getIntent().getData(), PROJECTION ,query, null,
Feeds.DEFAULT_SORT_ORDER);
}
Cursor cursor = managedQuery(getIntent().getData(), PROJECTION ,Feeds._ID+ " = "+ mCatId, null,
Feeds.DEFAULT_SORT_ORDER);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,
new String[] { Feeds.TITLE }, new int[] { android.R.id.text1 });
setListAdapter(adapter);
}
Nun meine Frage:
Ich habe mich gefragt, wie ich diesen Datenbank-Layout optimieren könnte, Code oder Abfrage, so würde ich meine Einträge in einer effizienteren Weise. Weil ich glaube, dass diese Link-Tabelle oder die Abfrage zum Abrufen von Links nicht benötigt wird! Oder mache ich das richtig?
Danke,
Antek