SQL Result in Array Speichern


Patejoker

Grünschnabel
#1
Hallo ihr lieben, ich habe da direkt mal ne Frage.

Ich möchte gerne meine 4 Antworten in ein Array packen damit ich dann diese wieder aus dem Array raus und einzeln an bestimmte stellen packen kann.

Nur leider fehlt mir da der passende Gedanke :(

Java:
import java.sql.*;


public class Connect {
    int Runde = 1;

    public void verbindenfrage() {

        // Diese Eintraege werden zum
        // Verbindungsaufbau benoetigt.
        final String hostname = "localhost";
        final String port = "3306";
        final String dbname = "ddbname";
        final String user = "dbuser";
        final String password = "passwort";

        Connection conn = null;

        try {
            System.out.println("* Treiber laden");
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        }
        catch (Exception e) {
            System.err.println("Unable to load driver.");
            e.printStackTrace();
        }
        try {
            System.out.println("* Verbindung aufbauen");
            String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
            conn = DriverManager.getConnection(url, user, password);

            System.out.println("* Statement beginnen");
            Statement stmt = conn.createStatement();

            System.out.println("* Abfrage beginnen");
            //Auslesen der Frage aus der Tabelen Fragen , da es nur eine Frage geben kann wird
            //diese per RAND ausgesucht !!
            String sqlCommand =
            "SELECT F_ID, F_TEXT FROM Fragen where S_ID ="+ Runde + " ORDER BY RAND()"+" LIMIT 1";
            // "SELECT ID, Frage FROM Fragen ";
            ResultSet rs = stmt.executeQuery(sqlCommand);
            System.out.println("* Ergebnisse anzeigen");
            int F_ID = 0;
            while (rs.next()) {
                F_ID = rs.getInt(1);
                String F_TEXT = rs.getString("F_TEXT");

                System.out.println( "ID: "+F_ID +" Frage: "+F_TEXT );

            }
            //Start der Abfragen bezüglich der Antworten zur oben ausgewählten Frage
            Statement stmt2 = conn.createStatement();
            String antwortQuery = "SELECT A_ID, A_TEXT FROM Antworten WHERE F_ID = " + F_ID;
            rs.close();
            rs = stmt2.executeQuery(antwortQuery);
            while (rs.next()) {
                int A_ID = rs.getInt("A_ID");
                String A_TEXT = rs.getString("A_TEXT");

                System.out.println( "ID: "+A_ID +" Antwort: "+A_TEXT );

            }
            rs.close();
            System.out.println("* Statement beenden");
            stmt.close();
            stmt2.close();;
            System.out.println("* Datenbank-Verbindung beenden");
            conn.close();
        }
        catch (SQLException sqle) {
            System.out.println("SQLException: " + sqle.getMessage());
            System.out.println("SQLState: " + sqle.getSQLState());
            System.out.println("VendorError: " + sqle.getErrorCode());
            sqle.printStackTrace();
        }

    }
 

Patejoker

Grünschnabel
#3
Ja ich habe noch kein Array angelegt da ich nicht genau wusste wo und wie , es soll der F_TEXT rein sowie ein istRichtig (booleen wert) den lese ich aber noch nicht mit aus. Was aber an sich nur eine weitere Zeile im SQL Befehl wäre.

Sprich alles im smtm2 soll ins Array, die sachen die ich dann genau benötige würde ich mir aus dem Array dann raus filtern
 
#4
Moin,
es soll der F_TEXT rein sowie ein istRichtig (booleen wert)
ein String UND ein boolean kannst Du nicht in einem Array speichern, da dort jeweils nur EIN Datentyp möglich ist !
Java:
int[][] A = new int[ 4 ][ 8 ];  // Beispiel mit int
Wenn Du Dir allerdings eine eigene kleine Klasse bastelst, deren Member aus einen String und einen Boolean bestehen, kannst Du Objekte dieser Klasse in einem Array speichern!
Beispiel:
Java:
/**
 * @class Pair
 * @brief Die Hilfsklasse Pair definiert den Datentyp "Pair", dessen Instanzen jeweils zwei Objekte mit beliebigem Typ
 *   enthalten. Hiermit können bspw. Wertepaare aus Methoden zurückgegeben werden
 */
public class Pair
{
   /** @brief Membervariable für das erste Objekt */
   private Object o1;
   
   /** @brief Membervariable für das zweite Objekt */
   private Object o2;
   
   // #####################################################################################################################

   /**
    * @brief Konstruktor
    * @param obj1 = erstes Objekt
    * @param obj2 = zweites Objekt
    */
   public Pair( Object obj1, Object obj2 )
   {
       this.o1 = obj1;
       this.o2 = obj2;
   } // Konstruktor
   
   // #####################################################################################################################

   /**
    * @brief Gibt das erste Objekt des Paares zurück
    * @result das erste Objekt
    */
    public Object getFirst()
    {
        return o1;
    } // getFirst
   
   // #####################################################################################################################

   /**
    * @brief Gibt das zweite Objekt des Paares zurück
    * @result das zweite Objekt
    */
    public Object getSecond()
    {
        return o2;
    } // getSecond
   
    // #####################################################################################################################

    /**
     * @brief Setzt das erste Objekt des Paares
     * @param obj = das zu setzende Objekt
     */
    public void setFirst( Object obj )
    {
        o1 = obj;
    } // setFirst
   
    // #####################################################################################################################

    /**
     * @brief Setzt das zweite Objekt des Paares
     * @param obj = das zu setzende Objekt
     */
    public void setSecond( Object obj)
    {
        o2 = obj;
    } // setSecond

} // Pair

// UND DANN
Pair[] myArray = new Pair[ 5 ];  // Array mit der Länge für Einträge vom typ 'Pair'
VG Klaus
 
#6
Wobei Du dann natürlich nicht zwingend ein Array nehmen musst!
Derartige Objekte kannst Du dann auch in Listen, Vektoren, Maps usw. verwalten!

VG Klaus
 

Patejoker

Grünschnabel
#7
Habe das jetzt auch über eine Kleine Klasse gelöst danke für den denkanstoss Fertig ist das ganze dann so:

Java:
import java.sql.*;                                                                                  
                                                                                                    
public class Connect {                                                                              
    int Runde = 1;                                                                                  
    //Antworten Array erzeugen mit Größe 4 aufgrundlage des Objektes aus der                        
    //Klasse Antworten                                                                              
    Antwort[] antworten = new Antwort[4];                                                           
                                                                                                    
    public void verbindenfrage() {                                                                  
                                                                                                    
        // Diese Eintraege werden zum                                                               
        // Verbindungsaufbau benoetigt.                                                             
        final String hostname = "localhost";                                            
        final String port = "3306";                                                                 
        final String dbname = "dbname";                                                           
        final String user = "user";                                                             
        final String password = "passwort";                                                     
                                                                                                    
        Connection conn = null;                                                                     
                                                                                                    
        try {                                                                                       
            System.out.println("* Treiber laden");                                                  
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();                                 
        }                                                                                           
        catch (Exception e) {                                                                       
            System.err.println("Unable to load driver.");                                           
            e.printStackTrace();                                                                    
        }                                                                                           
        try {                                                                                       
            System.out.println("* Verbindung aufbauen");                                            
            String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;                              
            conn = DriverManager.getConnection(url, user, password);                                
                                                                                                    
            System.out.println("* Statement beginnen");                                             
            Statement stmt = conn.createStatement();                                                
                                                                                                    
            System.out.println("* Abfrage beginnen");                                               
            //Auslesen der Frage aus der Tabelen Fragen , da es nur eine Frage geben kann wird      
            //diese per RAND ausgesucht !!                                                          
            String sqlCommand =                                                                     
            "SELECT F_ID, F_TEXT FROM Fragen where S_ID ="+ Runde + " ORDER BY RAND()"+" LIMIT 1";  
            // "SELECT ID, Frage FROM Fragen ";                                                     
            ResultSet rs = stmt.executeQuery(sqlCommand);                                           
            System.out.println("* Ergebnisse anzeigen");                                            
            int F_ID = 0;                                                                           
            while (rs.next()) {                                                                     
                F_ID = rs.getInt(1);                                                                
                String F_TEXT = rs.getString("F_TEXT");                                             
                                                                                                    
                System.out.println( "ID: "+F_ID +" Frage: "+F_TEXT );                               
                                                                                                    
            }                                                                                       
            //Start der Abfragen bezüglich der Antworten zur oben ausgewählten Frage                
            Statement stmt2 = conn.createStatement();                                               
            String antwortQuery = "SELECT A_ID, A_TEXT, istRichtig FROM Antworten WHERE F_ID = " + F_ID
            rs.close();                                                                             
            rs = stmt2.executeQuery(antwortQuery);                                                  
            int counter = 0;                                                                        
            while (rs.next()) {                                                                     
                int A_ID = rs.getInt("A_ID");                                                       
                String A_TEXT = rs.getString("A_TEXT");                                             
                int istRichtig = rs.getInt("istRichtig");                                           
                                                                                                    
                System.out.println( "ID: "+A_ID +" Antwort: "+A_TEXT +" istRichtig:" +istRichtig);  
                //Prüfen auf true oder false                                                        
                boolean istRichtig2 = false;                                                        
                if(istRichtig != 0){                                                                
                    istRichtig2 = true;                                                             
                }                                                                                   
                //Antworten ins Array geben !!                                                      
                Antwort ant = new Antwort(A_TEXT, istRichtig2);                                     
                antworten[counter] = ant;                                                           
                counter++;                                                                          
            }                                                                                       
            rs.close();                                                                             
            System.out.println("* Statement beenden");                                              
            stmt.close();                                                                           
            stmt2.close();;                                                                         
            System.out.println("* Datenbank-Verbindung beenden");                                   
            conn.close();                                                                           
            //Array abfragen und Inhalte ausgeben                                                   
            System.out.println("Array Abfragen");                                                   
            System.out.println(antworten.length);                                                   
            System.out.println(antworten[0].getAText() + " -> " + antworten[0].isIstRichtig());     
            System.out.println(antworten[1]);                                                       
        }                                                                                           
        catch (SQLException sqle) {                                                                 
            System.out.println("SQLException: " + sqle.getMessage());                               
            System.out.println("SQLState: " + sqle.getSQLState());                                  
            System.out.println("VendorError: " + sqle.getErrorCode());                              
            sqle.printStackTrace();                                                                 
        }                                                                                           
                                                                                                    
    }
Mit der Klasse Antwort

Java:
public class Antwort {

    private String AText;
    private boolean istRichtig;


    public String getAText() {
        return this.AText;
    }

    public void setAText(String AText) {
        this.AText = AText;
    }

    public boolean isIstRichtig() {
        return this.istRichtig;
    }

    public void setIstRichtig(boolean istRichtig) {
        this.istRichtig = istRichtig;
    }

    public Antwort(String AText, boolean istRichtig) {
        this.AText = AText;
        this.istRichtig = istRichtig;
    }

    @Override
    public String toString() {
        return this.getAText();
    }
}
 
#8
Moin,

jau, sieht doch erstmal ganz gut aus!
Aber vielleicht solltest Du bei der Ausgabe besser eine Schleife (über die Arraylänge) benutzen!
Ist zwar bei fix 4 Einträgen nur bedingt relevant, aber wenn sich die Anzahl mal auf 20, 50, 147 erhöht, wird so unschön ;)

VG Klaus