Stringbuilder verwenden

Status
Nicht offen für weitere Antworten.

Bhaldur

Neues Mitglied
Tag zusammen,

ich habe ein Problem mit dem Stringbuilder.

Code:
public ResultSet getStatistics(String Startebene,
				String Zielebene, String groesse, String gewicht, String geschlecht) throws SQLException {

			StringBuilder str = null;
			
			str.append("SELECT sum(t.costs) AS Gesamtkosten,"
					+ "  avg(t.costs) AS Durchschnittskosten,"
					+ "  sum(t.behandlungsdauer) AS Gesamtdauer,"
					+ "  avg(behandlungsdauer) AS Durchschnittsdauer "
					+ "FROM therapydata_all t ");
			
			if((groesse + gewicht + geschlecht)!=null){
				str.append(", patientdata_all p ");
			}
...

Bei
Code:
str.append("SELECT sum(t.c
bekomme ich eine Nullpointerexception die ich nicht wirklich verstehe. (Warum ist es an dieser Stelle überhaupt wichtig, nicht null zu sein?).
Einen Charwert kann ich dem Stringbuilder str nicht übergeben, es wird "null" verlangt. Wenn ich aber nicht mit einem null als Startwert beginnen kann, kann ich praktisch gar nichts mit dem Stringbuilder machen.

Kann mir jmd. verraten, wie ich dieses Problem umgehen kann?
 

max40

Bekanntes Mitglied
Java:
StringBuilder str = new StringBuilder();
			
str.append("SELECT sum(t.costs) AS Gesamtkosten,");
str.append("  avg(t.costs) AS Durchschnittskosten,");
str.append("  sum(t.behandlungsdauer) AS Gesamtdauer,");
str.append("  avg(behandlungsdauer) AS Durchschnittsdauer ");
str.append("FROM therapydata_all t ");

if((groesse + gewicht + geschlecht)!=null){    // sieht etwas komisch aus
	str.append(", patientdata_all p ");
}
 
M

maki

Gast
StringBuilder für SQL Statements ist imho nicht der richtige Weg, PreparedStatements dagegen schon.
 

Noctarius

Top Contributor
Ich mag die Version:
Querystrings (mit Platzhaltern) in ein Properties-File, von dort lesen, ab in PreparedStatement, Platzhalter ersetzen, ausführen :)
 
M

maki

Gast
Ich mag die Version:
Querystrings (mit Platzhaltern) in ein Properties-File, von dort lesen, ab in PreparedStatement, Platzhalter ersetzen, ausführen :)
Sieh dir doch mal die SQLMaps von iBatis an ;)
Da hast du dann gar nix mehr mit JDBC am Hut(try/catch Block im Try/catch Block etc.), und SQL Statement nur noch in XML Dateien und super Spring Unterstützung ;)
 

Noctarius

Top Contributor
Ich mach mit Queries eh nur im Ausnahmefall etwas, JPA über Eclipselink ;) (alternativ früher Torque)
 

Noctarius

Top Contributor
Am Anfang fand ich JPA etwas seltsam aber man gewöhnt sich dran. Ich hoffe nur, dass bald eine saubere Criteria API kommt. Die von Torque war besser als auch nicht so richtig TypeSafe.
 
M

maki

Gast
Am Anfang fand ich JPA etwas seltsam aber man gewöhnt sich dran. Ich hoffe nur, dass bald eine saubere Criteria API kommt. Die von Torque war besser als auch nicht so richtig TypeSafe.
Ich bin am überlegen ob JDO nicht doch die bessere Wahl ist, verglichen mit JPA.
JDO kann einiges mehr, gibt es ja schon seit 1999, aber erst seit ein paar Jahren auch als kostenlose Implementierungen.
Hat aber einen Riesennachteil: JDO braucht kein RDBMS ;)

Ist natürlich schlecht für Oracle & IBM..

Nachtrag: Bin letztens hierüber gestolpert
Java Data Objects (JDO) - Home
 
Zuletzt bearbeitet von einem Moderator:

SchonWiederFred

Bekanntes Mitglied
StringBuilder str = null;
str.append(...
str.append bedeutet: Führe die Methode append auf dem Objekt aus, auf das die Referenz zeigt, die in str gespeichert ist. Da in str leider keine gültige Referenz auf ein bestehendes Objekt (sondern null) gespeichert ist, kommt es zu einer NullPointerException. Du musst einen StringBuilder erzeugen und die Referenz darauf in str speichern.
 

Noctarius

Top Contributor
Ich bin am überlegen ob JDO nicht doch die bessere Wahl ist, verglichen mit JPA.
JDO kann einiges mehr, gibt es ja schon seit 1999, aber erst seit ein paar Jahren auch als kostenlose Implementierungen.
Hat aber einen Riesennachteil: JDO braucht kein RDBMS ;)

Ist natürlich schlecht für Oracle & IBM..

Nachtrag: Bin letztens hierüber gestolpert
Java Data Objects (JDO) - Home

JPA kann auch anderes als RDBMS, solange es einen passenden Vendor Adapter gibt. Was kann JDO denn mehr? Immerhin soll der Standard ja bald komplett "abgelöst" werden durch JPA2
 
M

maki

Gast
Was kann JDO denn mehr?
Java Data Objects (JDO) - JDO .v. JPA

Sehr interessant sind imho die sog. "fetch groups", da kann ein Objekt übergeben (fetch group), das aussagt, welche Attribute mitgeladen werden sollen. Ist so etwas angedacht für JPA 2.0?

JPA kann auch anderes als RDBMS, solange es einen passenden Vendor Adapter gibt.
Selbst mit Vendoradapter muss es eine RDBMS sein.

Immerhin soll der Standard ja bald komplett "abgelöst" werden durch JPA2
Wenn es nach dem Willen der "Expert Group" geht die JPA definniert schon ;)

Beschäftige mich im Moment nur theoretisch mit JDO, aber je mehr ich lese, desto verwunderter bin ich über JPA (besonders 1.0), da hat man doch wirklich das Rad neu erfunden, aber eckig.
Wie gesagt, JDO existiert seit 1999.
Wird wohl Zeit für ein bisschen praktische Erfahrung durch Experimente..
 

Noctarius

Top Contributor
Hmm ich denke ich bleibe bei Eclipselink :D Immerhin hab ich zur Not noch Moxy. Ansonsten brauch ich ehh immer nur RMDBS und JPA ist schön in Spring integriert
 

Bhaldur

Neues Mitglied
Danke für eure Antworten! :)

Bin nun vom Stringbuilder abgesprungen und versuche es über PreparedStatements... allerdings tauchen auch hier Probleme auf die mich in Verlegenheit bringen.

Bekomme eine java.sql.exception "before start of the result set".

Hier die neue Methode:

Zur Erklärung: Das Statement wird je nach Parameterübergabe ausgewählt, da es hier zu unterschiedlichen Anforderungen kommen kann. Manchmal ist die Größe nicht von belangen, manchmal benötigt man noch eine andere View etc. Daher der versuch es über die if-Fälle semi-dynamisch zu gestalten.

Code:
public double[] getStatistcs2(String Startebene, String Zielebene,
			String groesse, String gewicht, String geschlecht) {
		if (Startebene + Zielebene + groesse + gewicht + geschlecht == null)
			return null;
		String[] s = { Startebene, Zielebene, groesse, gewicht, geschlecht };

		for (int i = 0; i < s.length; i++) {
			if (s[i] == null) {
				if (i == 1)
					s[i] = "therapydata1";
				if (i == 2)
					s[i] = "therapydata1";
				if (i == 3 || i == 4)
					s[i] = "0";
				if (i == 5)
					s[i] = "'weiblich'";
			}

		}

		String query = "SELECT sum(t.costs) AS Gesamtkosten,"
				+ "  avg(t.costs) AS Durchschnittskosten,"
				+ "  sum(t.behandlungsdauer) AS Gesamtdauer,"
				+ "  avg(behandlungsdauer) AS Durchschnittsdauer "
				+ " FROM therapydata_all t, ";

		if (Startebene != null) {

			if (Startebene.equals("therapydata3")
					|| Startebene.equals("therapydata2")
					|| Startebene.equals("therapydata1")) {

				query += Startebene + " d";
			}
		}
		query += ", patientdata_all p" + " WHERE t.pid = d.pid"
				+ "  AND t.pid = p.id"
				+ "  AND t.behandlungsdauer = d.behandlungsdauer"
				+ "  AND t.versorgungsebene = d.versorgungsebene"
				+ "  AND t.versorgungsebene = ?" + "  AND p.gender=?;"
				+ "  AND p.height>?" + "  AND p.weight>?";

		double[] k = new double[4];
		for (int i = 0; i <= 3; i++) {
			try {
				k[i] = getResultset(query, s).getDouble((i + 1));
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return k;
	}

Evt. liegt der Fehler auch nicht hier, sondern in der main?

Code:
public static void main(String proConGes[]) {
		Preloader preloader = new Preloader("./seplogo.png", 32, 1);
		preloader.setVisible(true);
		preloader.setFinishedCallback(new Runnable() {
			public void run() {
				//System.out.println("---> test");
				ControlUnit cu = new ControlUnit();
				String str = "SELECT * FROM therapydata_all WHERE pid=?";
				String[] a = { "25" };
				try {
				ResultSet t = cu.getResultset(str, a);
				System.out.println(t.getDouble(1)); // <- java.sql.SQLException
				} catch (SQLException e) {
				// // TODO Auto-generated catch block
				e.printStackTrace();
				}
				
				cu.start();
			}
		});
		preloader.startFading();
	}

Denke der Fehler ist von gröberer Natur, etwas dass ich an den result sets / prepared statements noch nicht verstehe... könnt ihr mir noch mal weiterhelfen?
 
S

SlaterB

Gast
bevor man Daten von einem ResultSet abfragen kann, muss man es mindestens auf den ersten Eintrag setzen:
resultSet.next();

schau dir doch erstmal Tutorials an, wie die auf ResultSets zugreifen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
Kotelettklopfer Stringbuilder mit print ausgeben Java Basics - Anfänger-Themen 83
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
P Stringbuilder richtig einsetzen Java Basics - Anfänger-Themen 1
W Teilstring durch Teilstring mittels StringBuilder ersetzen Java Basics - Anfänger-Themen 7
P Schleife für insert() und delete() im StringBuilder in Verbindung mit indexOf() Java Basics - Anfänger-Themen 7
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
G Wie kann ich einem StringBuilder einen int Wert formatiert hinzufügen? Java Basics - Anfänger-Themen 8
G Gibt es eine Methode die bei einem StringBuilder n mal das Zeichen c hinzufügt? Java Basics - Anfänger-Themen 6
G StringBuilder .setLength Methode wirkungslos? Java Basics - Anfänger-Themen 2
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
K StringBuilder Objekt überschreiben - Speicherverbrauch Java Basics - Anfänger-Themen 3
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
H Suche Vergleichstabelle für die Klassen String und StringBuilder Java Basics - Anfänger-Themen 1
R Frage zum StringBuilder Java Basics - Anfänger-Themen 7
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
M Array erweitern ohne Stringbuilder Java Basics - Anfänger-Themen 6
E StringBuilder.delete Problem Java Basics - Anfänger-Themen 2
J StringBuilder / String zusammensetzen Java Basics - Anfänger-Themen 2
A Datentypen Stringbuilder vollständig leeren Java Basics - Anfänger-Themen 6
F Problem bei StringBuilder Methoden Java Basics - Anfänger-Themen 11
C String oder StringBuilder? Java Basics - Anfänger-Themen 13
Java-Insel StringBuilder Zeilenumbrüche erkennen Java Basics - Anfänger-Themen 3
L StringBuilder Probleme in einer Klasse Java Basics - Anfänger-Themen 4
S im StringBuilder Zeichenketten ersetzen Java Basics - Anfänger-Themen 6
J StringBuilder initialisieren und Löschbefehl Java Basics - Anfänger-Themen 20
M Gittermuster mit Stringbuilder und einfacher Schleife erstellen Java Basics - Anfänger-Themen 19
L StringBuilder OutOfMemoryError Java Basics - Anfänger-Themen 8
S StringBuilder Java Basics - Anfänger-Themen 13
J Strings und StringBuilder Java Basics - Anfänger-Themen 12
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
H Array + StringBuilder in eine Textdatei speichern.laden. Java Basics - Anfänger-Themen 7
D StringBuilder Java Basics - Anfänger-Themen 10
N String oder StringBuffer/StringBuilder Java Basics - Anfänger-Themen 6
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
I Scheduling: "Quartz" verwenden, Hilfe bei Umstellung Java Basics - Anfänger-Themen 3
B non-modular dependency in modularem Projekt verwenden Java Basics - Anfänger-Themen 3
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
B Jar Dateien ohne IDE verwenden? Java Basics - Anfänger-Themen 1
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
V Wachstum berechnen und in Ist-Formel verwenden Java Basics - Anfänger-Themen 5
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
K Boolean in einer erstellten Klasse verwenden Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
M Klassen Warum sollte man Abstraktion verwenden? Java Basics - Anfänger-Themen 4
N Attribut einer anderen Klasse übertragen/verwenden Java Basics - Anfänger-Themen 5
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
T Klassen Klasse in einer anderen Klasse verwenden. Java Basics - Anfänger-Themen 3
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
M Schleifenergebnis in selbiger wieder verwenden Java Basics - Anfänger-Themen 7
A OOP ArrayList verwenden Java Basics - Anfänger-Themen 3
M Erste Schritte Arraylist in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 11
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
D ArrayList in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 7
NightmareVirus überschriebene Methode der Oberklasse verwenden Java Basics - Anfänger-Themen 3
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
M Eingabe des Benutzers Verwenden Java Basics - Anfänger-Themen 9
P Quadratzeichen verwenden Java Basics - Anfänger-Themen 7
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
H Methoden verwenden Java Basics - Anfänger-Themen 4
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
OlafHD Variable aus einer anderen Klasse Verwenden Java Basics - Anfänger-Themen 11
K Dateien aus Source-Package verwenden Java Basics - Anfänger-Themen 10
N System Proxy verwenden Java Basics - Anfänger-Themen 0
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
G Wie kann man den Erfolg einer Zuweisung als Boolean Wert verwenden? Java Basics - Anfänger-Themen 12
H jar datei verwenden Java Basics - Anfänger-Themen 1
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
C compareTo verwenden Java Basics - Anfänger-Themen 2
W IllegalArgumentException 2 mal verwenden Java Basics - Anfänger-Themen 3
S Variablen Vektor zur Berechnung verwenden Java Basics - Anfänger-Themen 4
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
P JSON-Konfigurationsdatei verwenden: Probleme mit Pfad Java Basics - Anfänger-Themen 1
W Darf man den Übergabeparameter in einer Methode nicht verwenden? Java Basics - Anfänger-Themen 2
E Methode aus Klasse eins in Klasse zwei verwenden? Java Basics - Anfänger-Themen 2
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
B Zahlen zerlegen und verwenden Java Basics - Anfänger-Themen 2
S Inhalt aus anderen Klassen verwenden Java Basics - Anfänger-Themen 1
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
T Vererbung Variable aus anderer Klasse verwenden Java Basics - Anfänger-Themen 8
T File aus Classpath verwenden Java Basics - Anfänger-Themen 3
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
T Array in andere Klasse verwenden Java Basics - Anfänger-Themen 3
K Von einem Double wert nur die Zahl vor dem Komma verwenden Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben