kompletten Datensatz statt nur ein Feld auslesen lassen,wie?

Status
Nicht offen für weitere Antworten.

spaci76

Mitglied
Hi@ll,

so wie im beispiel habe ich es geschaft einzelne Datensätze per Klasse zu ziehen und zu verwenden. Könnte mir jemand auf die Sprünge helfen wie ich es schaffe nicht nur ein Feld sondern die komplette Line von id 1 (line 34) ala fahrzeug1.getString("Name") und fahrzeug1.getString("Farbe"), welche dann in Line 35 verfügbar sind.

Ich gehe mal davon aus das es in der LINE 22 liegt.

Ich bedanke mich im voraus für eure Vorschläge.

spaci76

Code:
import java.sql.ResultSet;
import java.sql.SQLException;
public class Sql{

        protected String selectstring;
public Sql (){}

public Sql( String e ){
        selectstring = e;
}

public String getSelectString() throws ClassNotFoundException{
        
  try {
            Class.forName( Constants.DBDRIVER ); 
            Connection conn = (Connection) DriverManager.getConnection( Constants.DBURL, Constants.DBUSER, Constants.DBUSERPW );
            Statement st = (Statement) conn.createStatement();
            String s = "SELECT * FROM configuration where configuration_id="+selectstring;
            ResultSet erg = st.executeQuery(s);
            while(erg.next()) 
                {
                selectstring = erg.getString("configuration_key");                
               }
            erg.close();
            st.close();
         }
       catch(SQLException e) {
       }
  return selectstring;
  
       }

static public void main( String args[]) throws ClassNotFoundException{
        Sql fahrzeug1 = new Sql("1"); //id from get.SelectString
        System.out.println( "F1: "+fahrzeug1.getSelectString());
}
}
 

Prismapanda

Aktives Mitglied
Oje, das ist aber ein übles Design.... :shock:
Also mal das was ich so sehe: Es werden Fahrzeuge in der Tabelle configuration gespeichert? Dann erstelle auch eine Klasse, die diese Tabellen (bzw. einen Datensatz daraus) repräsentiert. Also bspw. eine Klasse Fahrzeug. Dann kannst du ein Objekt dieser Klasse erstellen und auf die gewünschten Methoden zugreifen (z.B. getColor(), getName()).
So separierst du die Datenbank von deinem zu erstellenden Objekt. Egal wie klein dein Projekt sein mag, aber soweit sollte das Design mindestens gehen. Kannst dich auch gerne mal über DAOs informieren.
Wenn dir das alles nicht zusagt kannst du auch deine Methode getSelectString() ein Array oder eine Map zurückgeben lassen in der dann alle Werte indiziert zur Verfügung stehen, aber das wäre wohl die schlechteste und unsauberste Variante...
 

spaci76

Mitglied
hi,

vielen dank für die Antwort. Zwecks Design, nun zum Glück bin ich ja hier im Anfängerforum ;)
Ich will das was ich mache Hand und Fuss hat, wenn das mit dem Array so wie es in php der Fall wäre nicht korrekt ist, dann will ich mir selbst verständlich eine korrekte Programmierung angewöhnen. ;)

Ich bin hier weil ich will, nicht weil ich muss!! :)

nun die Frage, was bei diesem 2. Versuch zu verbessern wäre, bin für alle Tipps, gerne auch kurze Beispiele zur Veranschaulichung, sehr dankbar.



Code:
import java.sql.ResultSet;
import java.sql.SQLException;
public class Fahrzeug{

protected String selectid;
private String selectid_value;
    private String select_id;
public Fahrzeug (){}

public Fahrzeug( String e ){
        selectid = e;
        
}

public String getTyp() throws ClassNotFoundException{
        
  try {
            Class.forName( Constants.DBDRIVER ); 
            Connection conn = (Connection) DriverManager.getConnection( Constants.DBURL, Constants.DBUSER, Constants.DBUSERPW );
            Statement st = (Statement) conn.createStatement();
            String s = "SELECT configuration_key FROM configuration where configuration_id="+ selectid;
            ResultSet erg = st.executeQuery(s);
            while(erg.next()) 
                {
                select_id = erg.getString("configuration_key");                
               }
            erg.close();
            st.close();
         }
       catch(SQLException e) {
       }
  return select_id;
  
       }

public String getColor() throws ClassNotFoundException{
        
        
  try {
            Class.forName( Constants.DBDRIVER ); 
            Connection conn = (Connection) DriverManager.getConnection( Constants.DBURL, Constants.DBUSER, Constants.DBUSERPW );
            Statement st = (Statement) conn.createStatement();
            String s = "SELECT configuration_value FROM configuration where configuration_id="+ selectid;
            ResultSet erg = st.executeQuery(s);
            while(erg.next()) 
                {
                selectid_value = erg.getString("configuration_value");                
               }
            erg.close();
            st.close();
         }
       catch(SQLException e) {
       }
  return selectid_value;
  
       }

static public void main( String args[]) throws ClassNotFoundException{
        Fahrzeug fahrzeug1 = new Fahrzeug("1"); //id from get.SelectString
        System.out.println( "F1: "+fahrzeug1.getTyp());
        System.out.println( "F1: "+fahrzeug1.getColor());
}
}
 

Prismapanda

Aktives Mitglied
Ich denke dein Problem ist, dass du ziemlich viel vermischt und dich nicht ganz an die Objektorientierung anpasst. Die Vorgehensweise wie sie in php meistens benutzt wird (Array) führt vielleicht zum Ziel, verfehlt aber das OO Paradigma.
Grundsätzlich versuche es mal mit folgender Struktur:

Klasse Connection: Kapsel hier den Datenbankzugriff. Du kannst schon an deinem letzten Beispiel sehen, dass die DB Verbindung bei dir erheblichen Code verursacht. Die gibts denke ich mal auch fertig, aber schreib sie dir ruhig mal selber. Methoden wie query(String) wren sinnvoll...

Klasse Fahrzeug: Hier kommen nur die fahrzeugrelevanten Sachen rein. Farbe, Typ als Instanzvariablen etc. aber keine! Datenbankangelegenheiten

Klasse FahrzeugDAO: Ein DataAccessObject. EInfach mal danach googlen oder so. Hier übergibst du die DB Connection und beziehst über die ID eine Instanz der Klasse Fahrzeug.

Und dann der Ablauf:

Connection aufbauen. (z.B. con = connection.connect(host,port,user,pass,db))
Über DAO Fahrzeug instanzieren (z.B. Fahrzeug fahrzeug = dao.getById(id))
Benötigte Werte auslesen (z.B. fahrzeug.getColor())


Klingt vielleicht komplizierter als der prozedurale Ansatz aber wird dir so einige Vorteil schaffen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H Einlesen eines kompletten Arrays Java Basics - Anfänger-Themen 2
M Bei *.jar start kompletten String übergeben Java Basics - Anfänger-Themen 7
G Kompletten (image) Array löschen Java Basics - Anfänger-Themen 14
H2SO3- kompletten string aus datei auslesen (nicht .readline) Java Basics - Anfänger-Themen 21
G Kompletten InputStream der Kommandokonsole ausgeben Java Basics - Anfänger-Themen 8
G Kompletten Stacktrace mit Log4j ausgeben Java Basics - Anfänger-Themen 3
J Kompletten Ordner auf Webserver laden. Java Basics - Anfänger-Themen 6
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
L Auf herunterfahren des PCs reagieren und Datensatz update machen Java Basics - Anfänger-Themen 15
B HSQL Letzter Datensatz Java Basics - Anfänger-Themen 2
I Null als return obwohl datensatz existiert Java Basics - Anfänger-Themen 12
J Datensatz aus JTable löschen Java Basics - Anfänger-Themen 8
S datensatz löschen in Java Java Basics - Anfänger-Themen 8
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
H SimpleDataFormat.format() spuckt falsches Jahr aus (statt 1999 = 3899) Java Basics - Anfänger-Themen 7
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
T Datentypen char als Buchstaben statt als Zahl ausgeben Java Basics - Anfänger-Themen 4
P Datentypen Kann ich bei double Komma statt Punkt eingeben? Java Basics - Anfänger-Themen 14
L Dialogbox statt Konsole verwenden Java Basics - Anfänger-Themen 5
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
Z Lottoprogramm - Zeigt manchmal nur 5 Zahlen statt 6 an? Java Basics - Anfänger-Themen 4
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
B GridBagLayout in der oberen rechten Ecke starten statt mittig Java Basics - Anfänger-Themen 2
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
H inputfeld dezimalzahl mit komme statt punkt Java Basics - Anfänger-Themen 12
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
H TreeMap<> statt TreeMap<Long, String> Java Basics - Anfänger-Themen 2
J Polymorphie Iteratoren statt Collections Java Basics - Anfänger-Themen 13
C lokale Variable verwenden statt globale Java Basics - Anfänger-Themen 7
R POI HSSF liesst in Excel Formel statt Ergebnis Java Basics - Anfänger-Themen 4
K Compiler-Fehler Probleme mit UTF-8 (statt ANSI) und Notepad++ Java Basics - Anfänger-Themen 2
C Objektreferenz holen statt übergeben Java Basics - Anfänger-Themen 2
T Ausgabe findet nicht statt Java Basics - Anfänger-Themen 4
R Objektname statt Adresse ausgeben Java Basics - Anfänger-Themen 4
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Decimalpunkt statt Dezimalkomma Java Basics - Anfänger-Themen 2
T Array statt String Java Basics - Anfänger-Themen 12
Guybrush Threepwood array.length statt array.length() Java Basics - Anfänger-Themen 6
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
A log4j - wie kann ich im Quellcode initialisieren statt in der properties-Datei? Java Basics - Anfänger-Themen 2
Landei Annotations statt Listeners? Java Basics - Anfänger-Themen 36
K Txt statt in TextArea in JTable einlesen und bearbeiten können Java Basics - Anfänger-Themen 4
J statt modulo "if-Anweisung" Java Basics - Anfänger-Themen 9
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
D JSP include wie bei php? (inhalt statt ergebnis einfügen)) Java Basics - Anfänger-Themen 24
L Ausgabe in arabischen Zahlen statt in ASCII Java Basics - Anfänger-Themen 9
G Griechische statt lateinischen Buchstaben beim Schreiben Java Basics - Anfänger-Themen 9
M Beispiel-Webprojekt: Statt HSQLDB Postgres verwenden Java Basics - Anfänger-Themen 12
M was wenn der benutzer ein double statt int eingibt ? Java Basics - Anfänger-Themen 3
N Vergleich findet nicht statt. Java Basics - Anfänger-Themen 13
G JDialog auf Jpanel statt Frame? Java Basics - Anfänger-Themen 4
T Wie Eingabe von Gleitkommazahl mit Komma statt Punkt Java Basics - Anfänger-Themen 4
F Sanduhr statt Mauszeiger anzeigen Java Basics - Anfänger-Themen 3
A .statt,anzeigen beim NumberFormat + Wie JTable formatieren? Java Basics - Anfänger-Themen 4
G Toolbar buttons sollen dialoge anzeigne statt pop up Java Basics - Anfänger-Themen 44
R Nur Double statt Sting oder Integer Combo sortieren und ! Java Basics - Anfänger-Themen 16
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
M statt drop down menü - buttons Java Basics - Anfänger-Themen 5
O JToolBar wird Tab in JTabbedPane statt Toolbar in JFrame Java Basics - Anfänger-Themen 6
W Punkt statt Komma? Java Basics - Anfänger-Themen 2
M Zeichen aneinander Reihen, statt diese zu ersetzen! Java Basics - Anfänger-Themen 3
Dilandau html applet: .jar laden statt .class Java Basics - Anfänger-Themen 4
V Betätigung des Buttons Erhöhung der Variablen um 2 statt 1 Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben