Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 08.02.2005, 19:49   Nach oben    #1
Benutzer
 
Benutzerbild von mr1st
 
Registriert seit: 08.02.2005
Ort: Wien
Beiträge: 85
Standard [Gelöst] Größe eines ResultSets

Hallo, ich hätte gerne eine Größe eines ResultSet, bevor ich mich durcharbeite. Ich möchte wenn möglich aber keinen extra Query dafür an die Datenbankschicken, weil dieser bis auf die Zugabe von COUNT genau gleich wäre, und ich mit nur einem Query auskommen möchte.

Geht das, wenn ja, wie?

MfG
__________________
Kosmetik Hobby
mr1st ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2005, 20:21   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

ja. eigentlich solltest du doch ein COUNT(id) in den Query reinzwirbeln können.
also

Java Code:
  1. SELECT COUNT(id) as anzahl, daten FROM  tabelle

oder hab ich da jetzt nen denkfehler .. ?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2005, 20:45   Nach oben    #3
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 567
Standard

Ich nehme mal an du brauchst die Größe für ein Array das du erstellen möchtest?

Das Problem hatte ich auch, habe dann einfach auf Vector umgeschwenkt, das hat sich mehr angeboten.

Wirklich helfen tut dir das aber nicht.

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.02.2005, 21:57   Nach oben    #4
Benutzer
 
Benutzerbild von mr1st
 
Registriert seit: 08.02.2005
Ort: Wien
Beiträge: 85
Standard

@sparrow: Genau, hätte gern ein Array gehabt, ein String-Array um genau zu sein, weil ich das dann an eine JSP sende und dort gerne alles mit Arrays mache.

@Ben: Meine Queries wären 2 mal beinahe gleich. Ich dachte mir, das hätte eine schlechte Performace. Das ganze sollte für ein Gästebuch und in späterer Folge für ein Forum sein. Da will ich dann pro Seite maximal 10 Postings haben.

Ich bin aber gerade draufgekommen, dass ich nur ganz am Anfang einmal die Anzahl der gesamten Postings zu zählen, dann einen Zähler auf diesen Wert setzen und bei neuen Einträgen weiter zählen. Dadurch habe ich immer die Gesamtanzahl der Postings. Mit dem Modulo Operator bekomme ich dann ganz leicht die Anzahl der Posts für die letzte Seite meines Gästebuches.

Danke trotzdem
__________________
Kosmetik Hobby
mr1st ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 05:42   Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 243
Standard

Du kannst Dir aus dem ResultSet die MetaDaten holen mit

Java Code:
  1. ResultSetMetaData rsmd = deinResultset.getMetaData();

über die ResultSetMetaData Geschichte stehen Dir dann viele Möglichkeiten zu Verfügung so allerlei über Deinen ResultSet zu erfahren.

zum Bleistift:
Java Code:
  1. int i = rsmd.getColumnCount()
um zu erfahren wieviel Datensätze sich in Deinem ResultSet befinden.
nove ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 08:01   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

@nove:
das habe ich jetzt schon das zweite mal von dir gehört und mir mal angeschaut, was denn die meta-daten eigentlich sind und ich muss sagen ..ThumbsUp*

laut
http://java.sun.com/j2se/1.5.0/docs/...tMetaData.html
kann man da ja echt informative sachen rausfinden.

sehr gut. *merk-ResultSetMetaData*

danke ...

grüße ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 08:22   Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 243
Standard

wenn du ResultSetMetaData nicht kennst.
Frage ich mich wie du bis jetzt mit ResultSets gearbeitet hast

Die Frage ist ernstgemeint.
nove ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 08:55   Nach oben    #8
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Zitat:
ich kenne mich mit datenbankkommunikation unter java nicht aus
http://kampet.drunken-seals.de/javaf...27&start=3

gar nicht!
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 09:31   Nach oben    #9
LordOfCodes
Gast
 
Beiträge: n/a
Standard

@Nove
Man kann mit einem ResultSet NICHT herausfinden, wie viele Datensätze (ROWs) geliefert wurden, auch nicht mit den MetaData-Klassen. Das Beispiel welches du geliefert hast, liefert dir die Anzahl SPALTEN..
Java Code:
  1. int i = rsmd.getColumnCount() //Columns = SPALTEN, nicht Zeilen...

Nur um Missverständnisse aus dem Weg zu räumen.

Dies ist ein wesentlicher Schwachpunkt der JDBC..
Ich habs auch immer mit "select count(*) .." gelöst.

Greets
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 11:26   Nach oben    #10
Benutzer
 
Benutzerbild von ehli75
 
Registriert seit: 30.11.2004
Beiträge: 97
Standard

@LordOfCodes: Stimmt ... das könnten die irgendwie mal in einer der nächsten Versionen von JDBC einbauen !!

Ich mach das immer mit einem Vector ... erst alles in den Vector rein ... und anschliessend durch den Vector rennen und alles in ein Array packen ... ist wahrscheinlich nicht sehr elegant aber es geht.
ehli75 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.02.2005, 12:49   Nach oben    #11
Benutzer
 
Benutzerbild von mr1st
 
Registriert seit: 08.02.2005
Ort: Wien
Beiträge: 85
Standard

@nove:
Ich habe bisher nicht wirklich viel mit Datenbankanbindung gearbeitet, nur das, was wir in der Schule beigebracht bekamen. Da kam das ResultSetMetaData leider nicht vor, höre jetzt zum ersten mal davon.

@LordOfCodes
Das Count(*) wollte ich eben nicht einsetzen, weil ich die Anzahl meiner Statements möglichst klein halten will.

@ehli75
Genau dieses durchackern durch den Vector wollte ich eben verhindern.

@all
Ich habe, wie bereits geschrieben, schon eine andere Lösung für mein Problem gefunden. Trotzdem danke für die rege Anteilnahme.

MfG
__________________
Kosmetik Hobby
mr1st ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2005, 07:10   Nach oben    #12
Erfahrener Benutzer
 
Registriert seit: 16.11.2005
Beiträge: 243
Standard

@LordOfCodes

sorry da bin ich wohl den falschen Gedankenpfad getrampelt.

eigentlich müsste es aber auch so gehen:

Java Code:
  1. wasauchimmer index;
  2. deinResultSet.last;
  3. index=deinResultSet.getwasauchimmer("indexdeinerdatenbank");

("wasauchimmer" durch String,char,int oder wasauchimmer ersetzen)
nove ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2005, 07:28   Nach oben    #13
Fuzzy
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von ehli75
@LordOfCodes: Stimmt ... das könnten die irgendwie mal in einer der nächsten Versionen von JDBC einbauen !
Da muß ich euch enttäuschen. Das ist keine Schwachstelle der JDBC, sondern von Datenbanken an sich. Ein SELECT Statement kann gar nicht in allen Fällen wissen, wie viele Zeilen am Ende herauskommen, da zu Beginn der Abfrage noch gar nicht die Datenbank komplett ausgewertet worden ist. Technisch gesehen gibt es zwar bestimmte Statements, bei denen das möglich ist (z.B. Abfragen, die sortiert werden) aber das gilt bei weitem nicht für alle.

Wenn man bedenkt, das JDBC die Abfragen nur durchreicht, bedeutet das entweder, das alle Datenbanken aller Hersteller umgeschrieben werden müssen oder das JDBC das Ergebnis komplett selbst im Speicher halten muß, um die Anforderung zu erledigen. Letzteres ist allerdings bei großen Abfragen gefährlich, wenn man nicht - wie bei Windows-Rechner ohnehin nötig - mindestens 512MB Hauptspeicher hat...

Außerdem muß zunächst die gesamte Abfrage aus der Datenbank geholt werden, bevor ein solches Ergebnis zurückgegeben werden kann.

Immerhin ist das Problem für diesen Spezialfall schon gelöst . Für den allgemeinen Fall wird es - fürchte ich - noch lange ungelöst bleiben.

Viele Grüße

Fuzzy.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.05.2005, 22:33   Nach oben    #14
TheSunToucher
Gast
 
Beiträge: n/a
Standard

Hi, bin neu hier und hab den Thread graderst entdeckt, deshalb gebe ich einfach nochmal meinen Senf dazu:

Also wie mein Vorredner schon richtig angemerkt hat, ihr habt eine falsche Vorstellung vom ResultSet, das ganze arbeitet Asynchron zum Programm und holt mit ".next()" immer den nächsten Datensatz aus der Datenbank (oder dem Cache). Ein ResultSet-Objekt enthält also nicht das komplette Ergebnis der Abfrage im Speicher, man stelle sich nurmal vor man macht eine Query über 1.000.000 Datensätze! Oder hat mehrere Megabyte große BLOBs. Deshalb ist es auch nicht wirklich sinnvoll das ganze in ein Array zu kopieren, es fällt bei kleineren Anwendungen wie einem Gästebuch aber nicht auf.

Über den Performance verlust bei einem "SELECT COUNT(id) ..." würde ich mir weniger Sorgen machen, dafür hat die Datenbank extra logiken.

Gruß
Tim
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Icon an Größe von JButton automatisch anpassen. Lautsprecher Desktop-Applikationen und Grafik 2 20.10.2005 15:19
Canvas Größe Lengen1971 Desktop-Applikationen und Grafik 2 29.09.2005 08:56
JButton größe festlegen Souljumper Desktop-Applikationen und Grafik 5 02.07.2005 15:42
JFrame mittig und unveränderbar in der Größe Gottzilla Desktop-Applikationen und Grafik 3 01.07.2005 14:22
Applet größe Anpassen Java_Newbie Desktop-Applikationen und Grafik 5 23.06.2005 21:04


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:46 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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