JDBC Methode in Datenbanken

pg1337

Bekanntes Mitglied
Java:
 public City findCityByName(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
	   
	  
	   Connection conn= getConnection();
	   stmt= conn.createStatement();
	   ResultSet result= stmt.executeQuery("SELECT*FROM cities WHERE name= '" + name + "'");
	   
	   while(result.next()) {
		   City d= new City();
		   d.setName(result.getString("name"));
		   d.setArea(result.getInt("groesse"));
		   d.setPopulation(result.getInt("population"));
		   
		   return d;
	   }
	   
        conn.close();
        return null;
}


So sieht die methode jetzt aus.

Wie gebe ich das in der Main dann aus?

Java:
Uebung e= new Uebung();
	   City stuttgart= e.findCityByName("Stuttgart");   for (City city : City) {
           System.out.println(city.toString());           
       }
 
Zuletzt bearbeitet:
C

Camino

Gast
Wie gebe ich das in der Main dann aus?

Java:
Uebung e= new Uebung();
	   City stuttgart= e.findCityByName("Stuttgart");   for (City city : City) {
           System.out.println(city.toString());           
       }

Ich glaube, du hast das mit der for-Schleife noch nicht richtig verstanden.
Java:
for (City city : ArrayList<City>)

Das bedeutet, du hast eine Liste, in der sich City-Objekte befinden --> z.B. ArrayList<City> cityListe

Mit der for-Schleife gehst du diese Liste durch und bekommst dann in jedem Schleifendurchlauf das fortlaufende City-Objekt (City city) geliefert, auf das du dann in der Schleife zugreifen kannst.

Dein Problem ist jetzt, dass du in deiner Methode keine Liste erzeugst, sondern nur 1 City-Objekt, welches deine Methode als Rückgabewert hat. Es kommt also keine Liste sondern ein City-Objekt zurück.

Java:
City stuttgart= e.findCityByName("Stuttgart");
System.out.println(stuttgart.toString());
 

pg1337

Bekanntes Mitglied
Ich glaube, du hast das mit der for-Schleife noch nicht richtig verstanden.
Java:
for (City city : ArrayList<City>)

Das bedeutet, du hast eine Liste, in der sich City-Objekte befinden --> z.B. ArrayList<City> cityListe

Mit der for-Schleife gehst du diese Liste durch und bekommst dann in jedem Schleifendurchlauf das fortlaufende City-Objekt (City city) geliefert, auf das du dann in der Schleife zugreifen kannst.

Dein Problem ist jetzt, dass du in deiner Methode keine Liste erzeugst, sondern nur 1 City-Objekt, welches deine Methode als Rückgabewert hat. Es kommt also keine Liste sondern ein City-Objekt zurück.

Java:
City stuttgart= e.findCityByName("Stuttgart");
System.out.println(stuttgart.toString());

Ok, vielen dank.

Das Problem ist, dass ich mich erst seit kurzer zeit mit Java beschäftige, es aber so schnell es geht lernen muss um das Studentenniveau zu erreichen, Gründe dafür seien dahinter gestellt.

Ich habe jeden Tag 10h Zeit Java zu lernen, und da ist grade einfach soviel Info im Kopf dass er schon fast platzt.

Die Datenbanken waren jetzt schon ein ziemlich fortgeschrittenes Thema, habe mich zuvor mit anderen Sachen beschäftigt, mit GUI's etc.
Tut mir leid wenn euch das nerven gekostet hat, aber am Anfang geht das noch nicht so schnell. Beschäftige mich erst ein paar Wochen mit java..

Trotzdem danke dass ihr euch die Zeit genommen habt!
Gruß & einen schönen Abend noch :)

p.s. wenn ihr gute Tutorials kennt (Videostreams) oder Andere Seiten(bitte kein galileo openbook) wäre es nett, wenn ihr mir diese per pn zuschicken könntet.
 
C

Camino

Gast
Deine Methode
Code:
public City findCityByName(String name)
ist so auch noch nicht richtig.
Was machst du, wenn es mehrere Datensätze mit "Stuttgart" als Name in der DB gibt? Du solltest
Code:
City d = new City();
ganz oben in die Methode verschieben und nicht in der Schleife das Objekt erzeugen. Und dann unten (nach close) nicht null sondern das Objekt d zurückgeben.
 

pg1337

Bekanntes Mitglied
Deine Methode
Code:
public City findCityByName(String name)
ist so auch noch nicht richtig.
Was machst du, wenn es mehrere Datensätze mit "Stuttgart" als Name in der DB gibt? Du solltest
Code:
City d = new City();
ganz oben in die Methode verschieben und nicht in der Schleife das Objekt erzeugen. Und dann unten (nach close) nicht null sondern das Objekt d zurückgeben.


das "return d" in der Schleife dann praktisch rausschmeißen?
ok gut das passt so. ja verstehe was du meinst habs noch nachträglich geändert :)danke
 
Zuletzt bearbeitet:
C

Camino

Gast
das "return d" in der Schleife dann praktisch rausschmeißen?
Ja (bzw. das return d ganz zum Schluss), weil ein return einen Wert zurückgibt und dann der Rest der Methode nicht mehr weiter ausgeführt wird.

Nicht aufgeben! Java ist nicht ganz einfach. Man sollte auf jeden Fall besonders zum Beginn mal einen Blick in Bücher werfen und die Grundlagen (Klassen, Objekte, Methoden...) lernen.
 

pg1337

Bekanntes Mitglied
Ja (bzw. das return d ganz zum Schluss), weil ein return einen Wert zurückgibt und dann der Rest der Methode nicht mehr weiter ausgeführt wird.

Nicht aufgeben! Java ist nicht ganz einfach. Man sollte auf jeden Fall besonders zum Beginn mal einen Blick in Bücher werfen und die Grundlagen (Klassen, Objekte, Methoden...) lernen.


Hab ich nicht vor :) Werde bestimmt noch öfters was in dem Forum fragen, war ja klasse wie schnell mir geholfen wurde!

Habe schon 2 Bücher (Eddison Wesley verlag und das andere java von kopf bis fuß) relativ weiter durchgemacht, nur mich hat das bei JDBC alles ein bisschen verwirrt.. am besten erstmal ne Nacht drüber schlafen. Also vielen Dank dir nochmal!

Gruß :)
 
C

Camino

Gast
Ja, eine Nacht drüber schlafen hat mir auch schon manchmal geholfen... ;-) Aber wie auch schon gesagt: einige deiner Probleme hatten nichts direkt mit JDBC zu tun, sondern waren grundsätzliche Fehler. Es ist halt auch schwer, gleich mit JDBC anzufangen, wenn zum Teil noch Java-Grundlagen fehlen. Also, speziell wie Klassen, Objekte und Methoden strukturiert sind und funktionieren. Oder das Arbeiten mit Collections. Das solltest du dir auf jeden Fall noch aneignen, dann klappt es auch mit JDBC besser und macht mehr Spass.
 

pg1337

Bekanntes Mitglied
So ich bins nochmals.

Nun habe ich 2 Tabellen in meiner Datenbank.

Einmal die Tabelle cities, in welcher Name, population & area der Städte gespeichert sind.
Die andere Tabelle heißt land. In Ihr stehen die länder drin (name, population).

Zusätzlich habe ich jetzt eine country_id angelegt, sprich:

in beiden Tabellen ist eine neue Spalte id dazu gekommen.
Das sieht folgendermaßen aus:

id 1 --> Deutschland --> 80 mio
id2 - -> USA --> 315 mio
etc.


Nun möchte ich in einer dritten Klasse Country alle Städte in einer Liste speichern und dann Städte in der main von Uebung ausgeben lassen, die zum Beispiel in Deutschland liegen(aber in der anderen Tabelle gespeichert sind) mit der Methode ...public Country getCountryByName(String name).


Meine Frage: Wie kann ich da jetzt die Verbindung zwischen den beiden Tabellen herstellen, dass wenn ich Deutschland als Name vorgebe in der main methode in der anderen Tabelle geschaut wird, welche Städte zu Deutschland gehören (Also die id=1 haben) und diese dann ausgeben lasse.


Gruß & danke schonmals.
 

pg1337

Bekanntes Mitglied
Danke dafür- hatte heut n anstrengenden Tag werde mich der Sache morgen früh widmen- trotzdem danke dass du so schnell geantwortet hast :)
 

pg1337

Bekanntes Mitglied
So in ordnung?

Java:
 public List<City> getCountryByName(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
	   
	   List<City> cityList= new ArrayList<City>();
	   Connection conn= getConnection();
	   stmt= conn.createStatement();
	   String query1= "SELECT*FROM land WHERE name= '" + name + "'";
	   ResultSet rst= stmt.executeQuery(query1);
	   
	   while(rst.next()) {
		   City b= new City();
		   b.setName(rst.getString("name"));
		   b.setPopulation(rst.getInt("population"));
		   cityList.add(b);
	   }
	   
	   String query= "SELECT*FROM cities c , land l WHERE l.id=c.country_id AND l.name= '" + name + "'";
	   ResultSet result= stmt.executeQuery(query);
	   
	   while(result.next()) {
		   City c= new City();
		   c.setName(result.getString("name"));
		   c.setPopulation(result.getInt("population"));
		   cityList.add(c);
	   }
	   conn.close();
	   return cityList;
   }

Gruß
 
Zuletzt bearbeitet:

pg1337

Bekanntes Mitglied
Java:
 public Country getCountryByName(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
	   
	   
	   Connection conn= getConnection();
	   stmt= conn.createStatement();
	   String query1= "SELECT*FROM land WHERE name= '" + name + "'";
	   ResultSet rst= stmt.executeQuery(query1);
	   Country country= new Country();
	   
	   while(rst.next()) {
		   
		   City b= new City();
		   b.setName(rst.getString("name"));
		   b.setPopulation(rst.getInt("population"));
		   country.getCityList().add(b);
	   }
	   
	   String query= "SELECT*FROM cities c , land l WHERE l.id=c.country_id AND l.name= '" + name + "'";
	   ResultSet result= stmt.executeQuery(query);
	   
	   while(result.next()) {
		   City c= new City();
		   c.setName(result.getString("name").trim()); // trim sonst große Lücke
		   c.setPopulation(result.getInt("population"));
		   country.getCityList().add(c); //country objekt auf cityList zugreifen 
	   }
	   conn.close();
	   return country;
   }


Hab die methode jetzt so umgeschrieben.
 

Neue Themen


Oben