Erste Schritte Arrays auweiten.....

lgund

Mitglied
Ich habe da ein echtes Problem.... und das seit Tagen :/...

ich mache eine MySQL Abfrage und bekomme natürlich X Zeilen zurück... für jede will ich alle Werte im String speichern... wie erstelle ich nun ein Array das genau X groß ist ??

Das ist mein Momentaner Quellcode:

Java:
    public static void main(String[] args)
    {
        conn = getInstance();
       
        if(conn != null)
        {
            // Anfrage-Statement erzeugen.
            Statement query     = null;
            ResultSet result    = null;
           
            try
            {
                query = conn.createStatement();
               
                String sql = "SELECT * FROM bot_grundeinstellung;";
                result = query.executeQuery(sql);
               
                MySQLConnection_n Connection2 = new MySQLConnection_n();
               
                // Ergebnissätze durchfahren.
                while (result.next())
                {
                    Connection2.Connection(result);
                }
               
                showMessageDialog(null, Connection2.getBot_Key());
               
            } catch (SQLException e) {
                // Es ist ein Fehler passiert
                //e.printStackTrace();
            } finally {
                try { if (result != null) result.close(); } catch (Exception e) {};
                try { if (query != null) query.close(); } catch (Exception e) {};
                try { if (conn != null) conn.close(); } catch (Exception e) {};
            }
        }
    }

und die MySQL Connection_n:

Java:
public class MySQLConnection_n
{
    private String ip             =   "";
    private String serverid       =   "";
    private String name           =   "";
    private String bot_key        =   "";
    private String username       =   "";
    private String password       =   "";
    private String queryport      =   "";
    private String active         =   "";
   
    public void Connection(ResultSet result) throws SQLException
    {
        ip              =   result.getString("ip_adress");
        serverid        =   result.getString("serverid");
        name            =   result.getString("serverid");
        bot_key         =   result.getString("serverid");
        username        =   result.getString("serverid");
        password        =   result.getString("serverid");
        queryport       =   result.getString("serverid");
        active          =   result.getString("serverid");
    }
   
    public String getIp()
    {
        return ip;
    }
   
    public String getServerId()
    {
        return serverid;
    }
   
    public String getName()
    {
        return name;
    }
   
    public String getBot_Key()
    {
        return bot_key;
    }
   
    public String getUsername()
    {
        return username;
    }
   
    public String getPassword()
    {
        return password;
    }
   
    public String getQueryPort()
    {
        return queryport;
    }
   
    public boolean getActive()
    {
        if(active.equals("true"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
 
Wenn du vorher nicht weißt, wie viele Elemente du kriegst, dann nimmst du kein Array, sondern eine Liste. Entweder ArrayList oder LinkedList. In deinem Fall eher LinkedList, da diese performanter beim Einfügen und Löschen von Elementen ist. Einfach mal das List Interface in der API angucken, Beispiele gibts' wie Sand am Meer.
 
Entweder du nutzt Listen oder du speicherst alles in einem String und trennst das ganze dann mit einem unbenutztem Zeichen, welches nicht '|' ist also zum Beispiel du speicherst in den String deinen Wert und ein '\n' dahinter. Wenn du alle Werte eingelesen hast und alle in diesem einem String gespeichert sind, dann kannst du mit
Java:
String[] meineWerte = meineWerteAlsEinString.split('\n');
Ein Array erzeugen, das genau X groß ist.
 
Dazu ist aber anzumerken, dass diese Methode äußerst schmutzig ist und definitiv nicht zu bevorzugen ist. Zumal es da, je nach Trennzeichen, auch noch Probleme geben kann.
 
Ich habe mich mal an den Ratschlag von Njans gehalten und mich über LinkedList erkundigt ein eingebaut.. scheint soweit zu funktionieren kriege bei der abfrage von .size immer die Anzahl der Zeilen in der Datenbank 🙂

aber wie kann ich damit nun arbeiten ???

Java:
    public static void main(String[] args)
    {
        conn = getInstance();
      
        if(conn != null)
        {
            // Anfrage-Statement erzeugen.
            Statement query     = null;
            ResultSet result    = null;
          
            // List erstellen
            LinkedList Bots     = new LinkedList();
          
            try
            {
                query = conn.createStatement();
              
                String sql = "SELECT * FROM bot_grundeinstellung;";
                result = query.executeQuery(sql);
              
                // Ergebnissätze durchfahren.
                while (result.next())
                {
                    Bots.add(new MySQLConnection_n());
                }
              
                for (Object Liste : Bots)
                {
                    // Wie komme ich nun an die Daten ?!
                }
              
              
            } catch (SQLException e) {
                // Es ist ein Fehler passiert
                //e.printStackTrace();
            } finally {
                try { if (result != null) result.close(); } catch (Exception e) {};
                try { if (query != null) query.close(); } catch (Exception e) {};
                try { if (conn != null) conn.close(); } catch (Exception e) {};
            }
        }
    }

eine Schleife ist schön und gut aber z.B. wie rufe ich nun die .getIp Methode auf ??

😕


vllt doch eher eine ArrayList ?
 
Generell verwenden Listen Generics:
aus
LinkedList Bots = new LinkedList();[/code]
wird dann
Java:
LinkedList<MySQLConnection_n> Bots  = new LinkedList<MySQLConnection_n>();

damit kriegst du dann auch in deiner For-Schleife:

Java:
for (MySQLConnection_n element: Bots)
element ist dann jeweils das aktuelle MySQLConnection_n-Objekt aus deiner Liste.
P.S. MySQLConnection_n ist ein furchtbarer Name und bricht mit der Namenskonvention in Java. Wenn ich mir die Klasse so angucke, dann würde ich die eher ConnectionData nennen. Das ist ja weniger eine Verbindung, als ein Datenobjekt.
 
(MySQLConnection_n => ConnectionData)

ahhhhh 😉 langsam verstehe ich das besser.. ^^ php ist mir irgendwie leichter gefallen 😀

Vergisst denn Teil bitte wieder 😱
 
Zuletzt bearbeitet:
Alles klar mit diesem Text funktioniert nun alles...

Java:
    public static void main(String[] args)
    {
        conn = getInstance();
      
        if(conn != null)
        {
            // Anfrage-Statement erzeugen.
            Statement query     = null;
            ResultSet result    = null;
          
            // List erstellen
            LinkedList<ConnectionData> Bots  = new LinkedList<ConnectionData>();
          
            try
            {
                query = conn.createStatement();
              
                String sql = "SELECT * FROM bot_grundeinstellung;";
                result = query.executeQuery(sql);
              
                // Ergebnissätze durchfahren.
                while (result.next())
                {
                    Bots.add(new ConnectionData());
                }
              
                for (ConnectionData element : Bots)
                {
                    showMessageDialog(null, element.getIp());
                  
                }
              
              
            } catch (SQLException e) {
                // Es ist ein Fehler passiert
                //e.printStackTrace();
            } finally {
                try { if (result != null) result.close(); } catch (Exception e) {};
                try { if (query != null) query.close(); } catch (Exception e) {};
                try { if (conn != null) conn.close(); } catch (Exception e) {};
            }
        }
    }

Letzte Frage am Ende.... bei dem Quelltext:

Code:
public class ConnectionData
{
    private static String ip             =   "";
    private static String serverid       =   "";
    private static String name           =   "";
    private static String bot_key        =   "";
    private static String username       =   "";
    private static String password       =   "";
    private static String queryport      =   "";
    private static String active         =   "";
  
    public void ConnectionData(ResultSet result) throws SQLException {
        ConnectionData.ip              =   result.getString("ip_adress");
        ConnectionData.serverid        =   result.getString("serverid");
        ConnectionData.name            =   result.getString("serverid");
        ConnectionData.bot_key         =   result.getString("serverid");
        ConnectionData.username        =   result.getString("serverid");
        ConnectionData.password        =   result.getString("serverid");
        ConnectionData.queryport       =   result.getString("serverid");
        ConnectionData.active          =   result.getString("serverid");
      
        showMessageDialog(null, result.getString("ip_adress"));
    }
......

wird bei dem Befehl "new ConnectionData" der Konstrukor nicht aufgerufen ?? oder habe ich das falsch gelesen ?
 
public void ConnectionData(ResultSet result) ich meine nur dass hier das 'void' weg muss. Wenn der Compiler sagt geht nicht, dann installier Java mal neu.
 
Oder warte mal hast du etwas versucht den Konstruktor damit aufzurufen "new ConnectionData"? da fehlen nämlich 2 Klammern und ein ';'
 
Habe es rausgefunden 🙂

Java:
// Ergebnissätze durchfahren.
                while (result.next())
                {
                    Bots.add(new ConnectionData());
                }

das muss das result noch übergeben werden sprich:

Code:
// Ergebnissätze durchfahren.
                while (result.next())
                {
                    Bots.add(new ConnectionData(result));
                }

nun geht alles perfekt danke für die SUPER schnelle Hilfe... echt Top Arbeit !!! 🙄🙄🙄

PS neu installieren ??? wtf sind wir hier bei Windoof ??!?!?! 😉🙂
 
Oder haste etwa nur vergessen den Aufruf des Konstruktors in einen try-catch block einzuhüllen. Den der Konstruktor wirft ja mit throws SQLException eine Exception. Irgendwo muss die aufgefangen werden
 
Das void muss auf jeden Fall weg, ein Konstruktor definiert keinen Rückgabeltyp.
Java:
while (result.next())
                {
                    Bots.add(new ConnectionData());
                }
Das geht dann natürlich nicht mehr so. Du hast dann nur einen Constructor, welcher als Parameter eben ein ResultSet erwartet. Du musst dann entweder hier eines übergeben, oder du baust einen Konstruktor ein, der keine Parameter hat.

@RalleYTN Du springst aber auch zu Extremen^^ Nur weil bei ihm irgendein Fehler auftritt gleich Java neu zu installieren erscheint unangebracht.
Ebenso sind Quadrupel-Posts auch nicht gerne gesehen, dafür gibt es den ,,Bearbeiten'' Knopf.
 
was genau ist das? Hab den Begriff noch nie gehört.

Das du nicht doppelte Post machst 😀

Das void muss auf jeden Fall weg, ein Konstruktor definiert keinen Rückgabeltyp.
Java:
while (result.next())
                {
                    Bots.add(new ConnectionData());
                }
Das geht dann natürlich nicht mehr so. Du hast dann nur einen Constructor, welcher als Parameter eben ein ResultSet erwartet. Du musst dann entweder hier eines übergeben, oder du baust einen Konstruktor ein, der keine Parameter hat.

@RalleYTN Du springst aber auch zu Extremen^^ Nur weil bei ihm irgendein Fehler auftritt gleich Java neu zu installieren erscheint unangebracht.
Ebenso sind Quadrupel-Posts auch nicht gerne gesehen, dafür gibt es den ,,Bearbeiten'' Knopf.

Ja habe ich gesehen desweiteren hat sich noch der Fehler eingeschlichen das ich bei ConnectionData static variabeln nutze die ich ja dadurch nur einmalig zuweisen kann und damit wurde mein String ständig überschrieben...

Ich nutze Windoof 😛
Alter ich auch 😀😀😀😀


Übrigens wenn du mal nach ein paar Bibliotheken suchst dann besuch meine Website: http://ralphs-games.weebly.com/bibleotheken.html Tutorialvideos gibts auch 😉
Danke für denn Tipp werde ich mir mal reinziehen 😀

So mein Kompleter Code dazu der nun ENDLICH funktioniert... nun kommt die ServerQuery von Teamspeak3 dazu 😱😱😱😱

Java:
    public static void main(String[] args)
    {
        conn = getInstance();
       
        if(conn != null)
        {
            // Anfrage-Statement erzeugen.
            Statement query     = null;
            ResultSet result    = null;
           
            // List erstellen
            LinkedList<ConnectionData> Bots  = new LinkedList<>();
           
            try
            {
                query = conn.createStatement();
               
                String sql = "SELECT * FROM bot_grundeinstellung;";
                result = query.executeQuery(sql);
               
                // Ergebnissätze durchfahren.
                while (result.next())
                {
                    //showMessageDialog(null, result.getString("ip_adress"));
                    Bots.add(new ConnectionData(result));
                }
               
                for (ConnectionData element : Bots)
                {
                    showMessageDialog(null, element.getIp());
                   
                }
               
               
            } catch (SQLException e) {
                // Es ist ein Fehler passiert
                //e.printStackTrace();
            } finally {
                try { if (result != null) result.close(); } catch (Exception e) {};
                try { if (query != null) query.close(); } catch (Exception e) {};
                try { if (conn != null) conn.close(); } catch (Exception e) {};
            }
        }
    }


Java:
package death_manns.teamspeakbot;

import java.sql.ResultSet;
import java.sql.SQLException;
import static javax.swing.JOptionPane.showMessageDialog;


public class ConnectionData
{
    private String ip             =   "";
    private String serverid       =   "";
    private String name           =   "";
    private String bot_key        =   "";
    private String username       =   "";
    private String password       =   "";
    private String queryport      =   "";
    private String active         =   "";
   
    public ConnectionData(ResultSet result) throws SQLException {
        ip              =   result.getString("ip_adress");
        serverid        =   result.getString("serverid");
        name            =   result.getString("serverid");
        bot_key         =   result.getString("serverid");
        username        =   result.getString("serverid");
        password        =   result.getString("serverid");
        queryport       =   result.getString("serverid");
        active          =   result.getString("serverid");
    }
   
    public String getIp()
    {
        return ip;
    }
   
    public String getServerId()
    {
        return serverid;
    }
   
    public String getName()
    {
        return name;
    }
   
    public String getBot_Key()
    {
        return bot_key;
    }
   
    public String getUsername()
    {
        return username;
    }
   
    public String getPassword()
    {
        return password;
    }
   
    public String getQueryPort()
    {
        return queryport;
    }
   
    public boolean getActive()
    {
        if(active.equals("true"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

Ach ja sehr geile Truppe hier freue mich schon auf eure Hilfe und wer weiß... vllt in ca 23046 Jahren kann ich euch mal helfen 😎😛

In diesem Sinne danke nochmals für die Hilfe... habe echt ewig an dem Problem dran gesessen 😳🙄
 
23046 Jahre, jetzt übertreibst du ein bisschen. Wenn du dich auf einen Bereich in Java konzentrierst dann wird das schon nächstes Jahr sein.
 

Zurück
Oben