SQLiteQueryBuilder

  • Antworten:20
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 00:02:21 via Website

Hallo,

hat jemand Infos zur Nutzung des SQLiteQueryBuilder oder kennt Links ?

Er sollte sich doch eignen diesen select abzusetzen ?

1SELECT B.name, B.spotid ,B.keyword, B.superforecast, B.forecast, B.statistic, B.wavereport, B.waveforecast, A.activ, A.usedirection, A.starting, A.till, A.windmeasure, A.minwind, A.maxwind FROM selected AS A, spot AS B WHERE A.spotid=B.spotid;

mfg,
Mac

PS: New Video

— geändert am 15.01.2010, 00:03:17

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Mod
  • Forum-Beiträge: 3.188

15.01.2010, 00:10:36 via Website

Fehlt da hinterm FROM nicht der Tabellenname ?

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 00:17:41 via Website

Nein, der table heißt selected. Die Query rennt auf der Konsole.

— geändert am 15.01.2010, 00:18:01

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 00:27:33 via Website

So in etwas sollte so was wohl aussehen:

1final Map<String, String> map = new HashMap<String, String>();
2
3 map.put("spot.name","B.name");
4 map.put("spot.spotid","B.spotid");
5 map.put("selected.name","A.active");
6 map.put("selected.usedirection","A.usedirection");
7
8 final SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
9 builder.setTables("spot,selected");
10 builder.setProjectionMap(map);
11 builder.query(db, map, selection, new String[]{"A.spotid=B.spotid"}, null, null, null);

Aber was ist hier selection oder sind meine selectionArgs hier falsch ?

PS: Im NotePadProvider.java ist das nicht klar ersichtlich für mich.


- Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 02:45:51 via Website

Danke, aber nirgends dort finden sich Infos zum benutzen des SQLiteQueryBuilder.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

15.01.2010, 07:42:43 via Website

Was für eine Fehlermeldung bekommst Du denn im Query Builder?

Grundsätzlich funktioniert diese Form der Abfrage nämlich:
1SELECT A.root_name, A.folder_id ,B.id, B.type FROM moz_bookmarks_roots AS A, moz_bookmarks AS B WHERE B.id=A.folder_id;

Getestet mit dem SQLite Manager.

lg Voss

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

15.01.2010, 10:57:00 via Website

selection ist einfach die WHERE clause

selectionArgs benutzt man dann, wenn man im query ein ?, also platzhalter, benutzt

swordiApps Blog - Website

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 12:39:20 via Website

Moin,

Hab jetzt folgendes:

1final Map<String, String> map = new HashMap<String, String>();
2
3 map.put("spot.name", "B.name");
4 map.put("spot.spotid", "B.spotid");
5 map.put("selected.activ", "A.activ");
6 map.put("selected.usedirection", "A.usedirection");
7
8 final SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
9 builder.setTables("spot,selected");
10 builder.setProjectionMap(map);
11 final Cursor tempCursor = builder.query(db, new String[]
12 { "B.name", "B.spotid", "A.activ", "A.usedirection" }, "A.spotid=B.spotid", null, null, null, null);



Bekomme aber ein:


01-15 12:37:10.153: ERROR/AndroidRuntime(978): java.lang.IllegalArgumentException: Invalid column B.name

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.01.2010, 13:28:32 via Website

Meine erste Vermutung wäre, das die Funktion nicht weiß was "A" und "B" ist, daher würde ich als erstes versuchen, die Kurznamen gegen die echten Namen auszutauschen.

Vielleicht kann ich hier aber auch gleich noch was lernen... :-)
Gibts nen Grund dafür, nicht einfach die rawQuery() Funktion zu benutzen?
Ich mache das in meinen Apps ausschließlich, weil der Vorteil der von Jörg genannte ist: ich kann die Statements am PC mit SqliteMan formulieren, ausführlich testen und dann 1:1 in meinen Code übertragen.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.01.2010, 14:02:36 via Website

@and dev: Soweit Ich weiß kannst du mit dem rawQuery keine JOINs machen, oder kenne ich das wieder nur nicht ?
Ich hatte A und B gegen den Tabellennamen getauscht was wiederum zu Fehlern führt.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

15.01.2010, 14:25:15 via Website

warum sollte kein join gehen?

vor allem ein "equi - join" sollte kein problem darstellen

in der form

1select x from a,b where a.id = b.id AND xx=yy

das geht sicher, hab ich schon oft gemacht

swordiApps Blog - Website

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.01.2010, 15:15:21 via Website

Soweit Ich weiß kannst du mit dem rawQuery keine JOINs machen, oder kenne ich das wieder nur nicht ?

Doch, das geht problemlos, mache ich dauernd.


Ich hatte A und B gegen den Tabellennamen getauscht was wiederum zu Fehlern führt.

Schade, dann sehe ich das so auch nicht...

— geändert am 15.01.2010, 15:17:04

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.01.2010, 15:15:39 via Website

Danke, es rennt mit dem rawQuery. Danke, hab wohl bisschen kompliziert gedacht.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

16.01.2010, 18:15:32 via Website

Gerne.

...finde ich jetzt aber schon spannend, das anscheinend keiner der mitlesenden Java-Gurus eine Idee hat, in welchem Fall der Builder die "bessere" Wahl wäre B)

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

16.01.2010, 18:18:31 via Website

is wohl nicht so nötig der builder

bin bis jetzt noch ganz gut ohne ausgekommen

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

16.01.2010, 19:04:06 via Website

and dev
Gerne.

...finde ich jetzt aber schon spannend, das anscheinend keiner der mitlesenden Java-Gurus eine Idee hat, in welchem Fall der Builder die "bessere" Wahl wäre B)

Ich will es mal so ausdrücken, wenn ich nicht gerade eine extreme Flexibilität benötige und nicht auf Abfragen mit prepared Statements aus Performancegründen angewiesen bin, dann lass ich tunlichst die Finger von solchen Frameworks.

Warum ? Ich hab alles unter Kontrolle ... bei solchen Frameworks passieren schnell Dinge die nur selten komplett nachvollziehbar sind und deren Bereinigung meist länger dauert als wenn ich native Querys absetze die ich selber kontrollieren kann.
Diese Einschätzung basiert einfach auf langjährigen Erfahrungen mit Frameworks wie Hibernate usw.

lg Voss

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

16.01.2010, 19:09:13 via Website

ja hibernate und so ein zeugs mag ich auch nicht.

mag zwar fein sein, aber eher nur bei standardsachen. sobald ein wenig vom standard abweichst, ist es eine qual finde ich

swordiApps Blog - Website

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

16.01.2010, 20:03:02 via Website

bei solchen Frameworks passieren schnell Dinge die nur selten komplett nachvollziehbar sind und deren Bereinigung meist länger dauert als wenn ich native Querys absetze die ich selber kontrollieren kann.

Jepp, ganz mein Reden.

Außerdem wird sowas immer (zumindest rechnerisch) unnötig Performance fressen (ich hab schon zu Zeiten programmiert, als das noch eine Rolle gespielt hat ;-)

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

16.01.2010, 22:36:20 via Website

Ich will mal so sagen, in gewissen, streng objektorientierten Umgebungen die eine gewisse Größe nicht überschreiten, kann so ein Framework wie Hibernate dem Entwickler schon stark unterstützen.

Es ist sicher unterschiedlich wo nun die Grenzen zu ziehen sind, aber ich hab noch gar nicht lange her einem jungen Entwickler mit wenigen Zeilen Code bewiesen, dass dieser ganze Hibernate Wahnsinn in bestimmten Situationen kompletter Overkill ist und ein System mehr ausbremst als Vorteile bringt.

Nur die wenigsten Entwickler machen sich heute noch die Mühe über vernünftige Datenmodelle nachzudenken und performante Querys zu entwickeln.

lg Voss

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

25.01.2010, 13:59:15 via Website

Allerdings weiß Ich nicht was für Projekte ihr so bis jetzt gestemmt habt, ein Framework kann einem halt helfen, wenn man es kennt.
In diesem Falle war ich einfach fehl-informiert, gut das passiert bei Dingen die man nicht genau kennt (Android). Doch sind auch viele Projektleiter Framework
verliebt, doch kann Ich zumindest immer wieder nachvollziehen dass das Rad neu erfinden meist nicht besser wird.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten