Choicefeld mit SQL

Moin,
habe eine Frage wie ich das Choicefeld mit einer SQL-Anfrage verbinde. So dass wenn ich 1 in Choicefeld wähle, das der Name von einer Person mit einer ID angezeigt wird z.B. 1 = Max Mustermann.
Habe mal ein Javacode-Ausschnitt eingefügt. Und ein Bild zum Verständnis, wie es Aussehen soll.


Java:
int countPersonID;
Choice chPersonID;
	public void chPersonID()
	{
			Statement stmt = null;
			ResultSet rs = null;

			try
			{
			stmt = (Statement) pConnect.getConnection().createStatement();
			rs = stmt.executeQuery("SELECT count(ID_Person) FROM tbl_Person");

            rs.next();

			countPersonID = rs.getInt(1);

			}
			catch (SQLException e)
			{}
			catch (NullPointerException e)
			{}
			chPersonID.add("Not Selected");
			for (int i=1;i<countPersonID + 1;i++)
			{
			chPersonID.add(Integer.toString(i));
			}
	}



mfg Brückenchiller
 

Michael...

Top Contributor
[JAVA=2]
Choice chPersonID;
public void chPersonID()[/code]
Grundsätzlich finde ich es ein bisschen unglücklich, wenn Methoden genauso wie Variablen heissen. Generell sollte man anhand des Namens einer Methode auch deren Zweck erkennen können.
catch Blöcke niemals leer lassen!! Mindestens
Code:
e.printStackTrace();
rein, wie soll man sonst evtl. Fehlerquellen finden.

Zur Frage: Sobald der Listener an der Choice Komponente reagiert, wird überprüft, ob ein gültiger Wert (z.B. SelectedIndex > 0) ausgewählt wurde. Anschließend wird mit diesem Wert (getSelectedItem) das Statement zusammengebaut (hier würde sich PreparedStatement empfehlen) und ausgeführt.
 
Moin,
Danke für die zwei Hinweise, wie ich das ordentlicher schreibe.
Zu den PreparedStatement könntest du da mal ein Beispiel eventuell machen, denn ich weiß nicht, wie ich das gescheit schreiben soll. Weil ich damit noch nichts gemacht habe.


mfg Brückenchiller
 

Michael...

Top Contributor
PreparedStatement einmalig definieren.
Java:
PreparedStatement stmt = con.prepareStatement("SELECT * FROM tbl_Person Where ID_Person = ?");
Und bei jeder Abfrage wieder verwenden:
Java:
stmt.setString/Int/OderWasAuchIDImmerFuerEinTypIst(1, chPersonID.getSelectedItem());
ResultSet rs = stmt.executeQuery();
Doku: PreparedStatement (Java Platform SE 6)
 

California

Aktives Mitglied
ResultSet.next ist boolean und sagt Dir, ob ein Satz da ist- also:

Java:
    if (rs.next) {
        // Satz verarbeiten
    }

So hast du schon einen potentiellen Fehler weniger.

Warum deklarierst Du counttrallala global und gibst es nicht als Returnwert der Funktion zurück? Du brauchst es doch nur dort?
Globale Variable sind pfui, außer es sind richtige Datenfelder der Klasse. Zwischenergebnisse kann man immer z.B. als Funktionsergebnisse weitergeben.
 

Neue Themen


Oben