setSelectedValue in SQL Query übergeben

Chriss_07

Aktives Mitglied
In meiner AutoComboBox benutze ich ein
Java:
setSelectedValue
, dass ich gerne für einen weiteren SQL Query verwenden möchte. Ich weiß aber nicht wie ich das Object übergeben soll
Java:
  void setSelectedValue(Object obj) {
    if (isFired) {
      return;
    } else {
      isFired = true;
      setSelectedItem(obj);
      fireItemStateChanged(new ItemEvent(this, 701, selectedItemReminder,
          1));
      isFired = false;
      System.out.println("Hab dich");
      return;
    }
  }
Das Object ist ein Ort aus einer ComboBox
mit dem nun die zugehörigen Strassen ermittelt werden sollen.
SQL:
... WHERE ort = " +  AutoComboBox.setSelectedValue(obj) +"
Ich komm da nicht weiter...???:L
Hat jemand einen Rat?
MfG Chriss
 

Antoras

Top Contributor
Du willst doch Daten aus der DB lesen, also musst du doch einen Getter und keinen Setter aufrufen.

SQL:
... WHERE ort = " +  AutoComboBox.getSelectedValue(obj) +"
 

Chriss_07

Aktives Mitglied
Ja also wenn ich ein
Java:
 public String getSelectedItem(){
	  System.out.println("Hab dich fest");
	return item;
	  
  }
hinzufüge und vorher als
Java:
private String item = "";
definiere, dann meckert das Query das der Methode nicht static ist. Auch wenn ich die Methode static mache, klappts nicht
Java:
This static method cannot hide the instance method from JComboBox
Außerdem sind die CB's nicht mehr mit dem
Java:
combobox.setSelectedItem("Ort7")
vorbelegt und die Auswahl über das DropDownFeld geht nicht, nur die Autovervollständigung über das Field
 

Antoras

Top Contributor
Du willst doch ein SQL-Statement in der Art:
SQL:
... WHERE ort ='berlin'

Also musst du dafür sorgen, dass du eine Methode definierst, die den Ort zurück gibt.

Die Fehlermeldung kommt wohl daher, weil du versuchst auf ein nicht instantiiertes AutoComboBox-Objekt zuzugreifen. Dein AutoComboBox-Objekt erbt wohl von JComboBox, also kannst du die Methode auch nicht einfach so auf static setzen. Also entweder eine eigene Methode erstellen, die das macht, oder AutoComboBox instantiieren.
 

Chriss_07

Aktives Mitglied
Ja genau, wenn Berlin also aus der ersten CB ausgewählt wurden sollen in der zweiten CB die Strassen von Berlin angezeigt werden.
ein get.SelectedItem geht nicht bei editierbarer CB, also habe ich ein getSelectedObject erstellt.
Java:
	public Object[] getOrt(){
		return CB1.getSelectedObjects();
	}
Und im AutoComboBox:
Java:
	private Object[] ort ;

 public Object[] getOrt(){
	  System.out.println("Hab dich fest");
	return ort;
	  
  }
Aber
SQL:
 ...AutoComboBox.getOrt()..
soll wieder auf static gesetzt werden!
Also macht diese Methode auch nicht was ich will, wo ist mein Denkfehler???:-(
 

Chriss_07

Aktives Mitglied
Die CB erbt die Methoden von AutoComboBox und ist
Java:
public static void main(String[] args) throws Exception {			
	    new NewJFrame().setVisible(true);
	 }
static?? Und meine Methode getSelectedObjects() in der Klasse der NewJFrame ist eine non-static Methode??
 

Antoras

Top Contributor
Lies dir das mal durch: http://www.java-forum.org/stichwort-static/1353-bedeutet-static.html

Das was du machen willst ist doch nicht so schwer. Du lädst alle Städtenamen. Sobald du nun in der CB ein Item auswählst, wird ein Event ausgelöst, mit dessen Hilfe du alle Strassen der ausgewählten Stadt in eine weitere CB nachladen kannst.

Hier noch mal zur Erklärung wie du an die Items eines CB kommst: How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
 

Chriss_07

Aktives Mitglied
Hast recht, war es auch nicht;)
Danke für dein Tipp mit der eigenen Methode - das war die Lösung.
Die Methode ist allerdings static
Java:
public static Object getOrt(){
und dann klappt es auch mit dem SQL Query.
Der Ort, der als setSelectedItem ("Ort7") hinterlegt ist, wird für die zweite Datenbankabfrage herangezogen. Ändere ich aber den Ort in der ComboBox, dann wird die neue Auswahl nicht übergeben. Somit wird die Methode nur beim Programmstart aufgerufen. Wie kann ich die Methode wieder neu aufrufen, wenn ContentsChanged?
 

Antoras

Top Contributor
Das Schlüsselwort static sollte nur mit bedacht eingesetzt werden und auch nur dann wenn man weiß was man mit ihm genau erreichen kann. In deinem Fall ist es unnötig.

Java:
AutoComboBox acb = new AutoComboBox();
acb.getOrt();
Dies ermöglicht dir, dass deine Methode nicht mehr statisch sein muss.

Auf der von mir geposteten Seite steht doch sogar ein Beispiel, das dein Problem löst:
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html hat gesagt.:
Java:
public class ComboBoxDemo ... implements ActionListener {
    . . .
        petList.addActionListener(this) {
    . . .
    public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox)e.getSource();
        String petName = (String)cb.getSelectedItem();
        updateLabel(petName);
    }
    . . .
}
Statt den Zeilen 7 und 8 musst du dann halt sowas schreiben:
Java:
String ort = (String)cb.getSelectedItem();
updateComboBoxStrassen(ort)
 

Chriss_07

Aktives Mitglied
So ich bin etwas weiter gekommen;)
Wenn ich den von dir beschrieben Weg gehe, muss für updateComboBoxStrassen(ort) ein actionListener geschrieben werden. Damit rufe ich die Methode getOrt() im AutoComboBoxModel wieder auf. getOrt() muss nun aber wieder static sein. Somit übergeb ich das SelectedItem der Methode getOrt().
So far so good: Meine Datenbank ist folgendermaßen aufgebaut: Als Column_Names verwende ich die Städtenamen, in den rows dann die Strassen.
Die Städte lese ich mit
Java:
 	          String col_name = md.getColumnName(i);
	          results.add(col_name);
	        }
aus. Die werden auch in der ComboBox angezeigt.

Wie kann ich in den Column_names nach dem getOrt() suchen??
 

Chriss_07

Aktives Mitglied
Ich habe die DB verändert. Zuerst habe ich den SQL Query getestet mit ORT STRASSE, jeweils in den Rows den Ort und die Strassen. Das erscheint mir aber als absoluter Quatsch, weil ich immer Ort und Strasse einfügen muss. Nun stellen die ColumNAmes/Header die Städte dar und in den rows sind die Strassen. Hat zum Vorteil, das ich bei wachsender DB einmal den neuen Ort anfüge und nur noch die Strassen in die rows eingebe.

Stimmt, ich habe keine Instanz von meinem Objekt angelegt, weil mit Instanz cb.getOrt() ich den ActionListener updateAutoComboBox nicht iniziieren kann. Mit static in der Methode lass ich die Instanz weg und kann den ActionListener aufrufen.
Aber getOrt() übergibt ein String an meine SQLQuery und den kann ich nicht mit
SQL:
'"+ +"'
einbinden
Java:
The operator + is undefined for the argument type(s) String, void
Was tun sprach Zeus?
 

Antoras

Top Contributor
Was tun sprach Zeus?
DB redesignen. Momentan sieht die bei dir wohl so aus:
berlin|hamburg|köln
str_berlin_1|str_hamburg_1|str_köln_1
str_berlin_2|str_hamburg_2|str_köln_2
str_berlin_3|str_hamburg_3|str_köln_3
Mach sie lieber so:
id|ort
1|berlin
2|hamburg
3|köln
strasse|ort
str_berlin_1|1
str_berlin_2|1
str_berlin_3|1
str_hamburg_1|2
str_hamburg_2|2
str_hamburg_3|2
str_köln_1|3
str_köln_2|3
str_köln_3|3
Dann hast du zwar 2 Tabellen, dafür musst du aber keine neuen Spalten einfügen, das macht man nämlich nicht.

zu
Code:
getOrt()
SQL:
'"+ getOrt() +"'
Getter geben einen Wert zurück, der in den String eingefügt wird. Du hattest zwischen den beiden '+' keinen Wert eingefügt.
 

Chriss_07

Aktives Mitglied
SQL:
....WHERE ort = ' + AutoComboBox.getOrt() + '.....

erzeugt

Java:
The operator + is undefined for the argument type(s) String, void

Ich nehme an, dass .getOrt() einen String enthält, der + Operator dafür nicht zulässig ist.
 

ARadauer

Top Contributor
....WHERE ort = ' + AutoComboBox.getOrt() + '.....
ist sowieso nix...

1. steht da wirklich ein ' ? versuch mal mit "
2. Was hat diese GUI Komponente bei dem Query zu suchen? Versuch die Gui vom Datenbankzugriff zu trennen. .. das heißt du übergibst den Ort String aus der Combobox einer Methode eines Objekts das spezell für den Zugfriff auf die Datenbank zuständig ist...
3. Verwende bitte Prepared Statements...
 

ARadauer

Top Contributor
aja hier...
Antoras schreibt: '"+ getOrt() +"'
du schreibst: WHERE ort = ' + AutoComboBox.getOrt() + '.....

so gehörts:
WHERE ort = ' " + AutoComboBox.getOrt() + " '.....
 

Chriss_07

Aktives Mitglied
Upsala Tippfehler von mir.
SQL:
...WHERE ort = ' " + AutoComboBox.getOrt() + " ' ....
verwende ich ja auch.
Ich Trenne also GUI vom DB-Zugriff mittels einer neuen Klasse ComboStrasse in der ich die Methode getOrt() deklariere und eine Referenz zur Methode getOrt() in der GUI schaffe.
Dann kann ich doch mittels:
Java:
private String strasse = "";
private String ort = "";
	
	
	
	public String getStrasse() {
		return strasse;
	}
	
	public void setStrasse(String strasse) {
		this.strasse= strasse;
	}
	
	public String getOrt() {
		return ort;
	}
	
	public void setOrt(String ort) {
		this.ort= ort;
	}
Java:
public ComboStrasse getStrasse(String strasse) {
ComboStrasse strassenew= new ComboStrasse();
"SELECT strasse FROM table WHERE ort = '"+ strasse.getOrt() +"'"......;
Denke ich jetzt verkehrt?
 

Antoras

Top Contributor
Genau, du kannst dir einen Container bauen, der deine Objekte beinhaltet. Allerdings kann es erstens mehrere Straßen geben, die in einer Stadt sind und zweitens willst du doch die Strassen zum Ort und nicht umgekehrt.

Java:
class ComboStrasse {
  String ort, strasse;
  public ComboStrasse(String ort, String, strasse) {
    this.ort = ort;
    this.strasse = strasse;
  }
  // Getters and Setters
}

Java:
public List<ComboStrasse> getStrassen(String ort) {
  List<ComboStrasse> l = new ArrayList<ComboStrasse>();
  
  try {
    String sql = "SELECT strasse FROM table WHERE ort=?";
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, ort);
    ResultSet r = ps.executeQuery();
    
    while (r.next()) {
      ComboStrasse c = new ComboStrasse(ort, r.getString(1));
      l.add(c);
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }
  return l;
}
 

Chriss_07

Aktives Mitglied
Oder auch nicht.. :(
Also ich roll das Thema nocheinmal auf, ich hoffe das ist ok. Nachdem ich gestern jede Menge gelöscht und geändert hatte, bekomme ich das Array nicht der zweiten ComboBox übergeben.
Zum Mäuse melken.
Ich lese den Ort aus (klappt!) und übergebe ihn als String dem zweiten SQL Query.

Die zweite Abfrage wird ins Array geschrieben.
Java:
List<ComboStrasse> l = new ArrayList<ComboStrasse>();
Der ComboBox will ich das nun irgendwie übergeben...
Es ärgert mich so - ich hoffe ihr habt noch Lust!!!
 

Antoras

Top Contributor
Laut API gibt es keine Methode, der man eine ArrayList übergeben kann, also bleibt dir nichts anderes übrig, als jedes Element einzeln hinzuzufügen:

Java:
for (ComboStrasse c : getStrassen(ort)) {
  comboBox.addItem(c.getStrasse());
}

Und beim nächsten Mal erst den alten Quelltext löschen wenn der Neue geht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
T TRIM in Query Datenbankprogrammierung 3
D sql query in methode mit rückgabetyp Datenbankprogrammierung 14
OnDemand Mysql Query Builder Datenbankprogrammierung 1
P Herausfinden wann Query null zurück gibt? Datenbankprogrammierung 1
OnDemand SQL Query Optimierung Datenbankprogrammierung 28
Kirby.exe Verwirrung beim Query Datenbankprogrammierung 4
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Oracle Query umbauen (sind die Querys gleich?) Datenbankprogrammierung 5
B Frage bei einer SQL Query Datenbankprogrammierung 3
C Fehlerhafte SQL Query Datenbankprogrammierung 4
B MySQL Query (Anfängerfrage :D) Datenbankprogrammierung 3
B JPA / HQL Support bei Query - Distanzberechnung Datenbankprogrammierung 0
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
Thallius MySQL Was ist falsch an dem Query? Datenbankprogrammierung 2
Thallius MySQL Wo ist der Fehler in dem Query? Datenbankprogrammierung 2
OnDemand MySQL SQL Query Datenbankprogrammierung 2
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
B Leerzeichen nach Umlaut -> Sichtbar erst nach Query! Datenbankprogrammierung 6
S sql query, um bestimten datensatz zu finden Datenbankprogrammierung 33
OnDemand SQL Query Anzahl der Werte Datenbankprogrammierung 8
H MySQL Anderer Query-Ansatz? Datenbankprogrammierung 4
P Tricky SQL Query Datenbankprogrammierung 3
P SQL Query Problem Datenbankprogrammierung 14
I Nullpointer bei einfacher Daba query Datenbankprogrammierung 12
I Query für Geburtstage Datenbankprogrammierung 6
S MYSQL: "Packet for query is too large" Datenbankprogrammierung 0
S HSQLDB PrepareStatement- Falsche query Datenbankprogrammierung 2
F Oracle The parameter name [...] in the query's selection criteria does not match any parameter name d Datenbankprogrammierung 2
J Fehler bei mySQL Query Datenbankprogrammierung 19
R MySQL berechnete Spalte im selben query weiterverwenden? Datenbankprogrammierung 4
S MySQL Hochkommata in Query Datenbankprogrammierung 7
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
T HQL Query funktioniert nicht? Datenbankprogrammierung 8
M PostgreSQL Hibernate Query Restriction Datenbankprogrammierung 2
N Query für Derby DB mit Enterbrise Bean Datenbankprogrammierung 4
algebraiker Eclipse RCP - no persistent classes found for query class Datenbankprogrammierung 4
M List aus Hibernate Query Datenbankprogrammierung 5
M JPA-Query - nicht das komplette Objekt Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
S DB2 Eclipselink Query Datenbankprogrammierung 2
LadyMilka Ergebnistyp HQL-Query Datenbankprogrammierung 3
M Frage zu folgender Query in EJB-QL Datenbankprogrammierung 4
Eldorado MySQL HQL Query Tag von Date Datenbankprogrammierung 6
H DB auslesen (Hibernate, Query, Parameter) Datenbankprogrammierung 8
C Split String für SQl query Datenbankprogrammierung 10
D Hibernate: Query verarbeiten Datenbankprogrammierung 11
B Hibernate, einfaches Query Ausgeben Datenbankprogrammierung 4
X Select Query auf Substring Datenbankprogrammierung 2
L Query grafisch erzeugen Datenbankprogrammierung 6
N SQL Query Browser Error Datenbankprogrammierung 6
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
Chtonian Effizientes Query System für Wortnachschlagewerk Datenbankprogrammierung 9
D Hibernate, Criteria Query Datenbankprogrammierung 2
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
G JPQL L*KE / JPA Query Language Datenbankprogrammierung 9
O SQL-Query bringt Fehler Datenbankprogrammierung 4
D kurze Frage zu einem Query Datenbankprogrammierung 6
S Query aus Querys Datenbankprogrammierung 14
P [Hibernate] Criterion-Query in HQL übersetzen Datenbankprogrammierung 10
D Neuer Query wird nicht erkannt Datenbankprogrammierung 10
E Wie koennte die SQL Query aussehen? Datenbankprogrammierung 13
B mysql query ausführen Datenbankprogrammierung 4
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
G How to put SQL query result into a file Datenbankprogrammierung 3
B Ein Query mit Mysql erzeugen Datenbankprogrammierung 6
G Hilfe bei Query für Spaltenansicht. Datenbankprogrammierung 20
A Fehler bei query Datenbankprogrammierung 7
G SQL-Query Methode Datenbankprogrammierung 4
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
L JTextfield Eingabe an DB übergeben Datenbankprogrammierung 5
D String übergeben Datenbankprogrammierung 7
D Komplette Zeile lesen und einem Konstruktor übergeben. Datenbankprogrammierung 3
W MySQL-Connection-Objekt übergeben Datenbankprogrammierung 2
N MySQL MYSQL Inhalt an JTable übergeben. Datenbankprogrammierung 11
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
G iBatis Datenbankverbindung - DB-User übergeben Datenbankprogrammierung 4
H JList an DB übergeben Datenbankprogrammierung 3
V Bei Insert nicht alles übergeben Datenbankprogrammierung 8
H Variablen übergeben Datenbankprogrammierung 4
S SQL-Anweisungen an DB übergeben und ausführen Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben