web-dev-qa-db-fra.com

java - retourne un tableau depuis la méthode

J'ai créé cet extrait:

public static String[] get_data()
{
    conn = getInstance();
    String[] data_array = null;
    if(conn != null)
    {
        Statement query;
        try 
        {
            query = conn.createStatement();

            String sql = "SELECT data_x FROM table_x";
            ResultSet result = query.executeQuery(sql);

            result.next();
            int count = result.getInt("data_x");
            result.close();

            data_x_array = new String[count];

            for (int x = 1; x <= count; x++)
            {
                String data_x = result.getString(x);
                data_x_array[x] = data_x;
            }
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
    }
    return data_x_array;
}

Je viens de créer une classe dans laquelle les données de la base de données sont collectées dans un tableau.

Maintenant, je veux juste renvoyer le tableau de cette méthode.

Mais ce que je reçois c'est:

data_array cannot be resolved to a variable

Quelqu'un pourrait m'aider?

Salutations!

METTRE À JOUR:

j'ai changé le fragment de code en:

public static String[] get_data()
{
    conn = getInstance();
    String[] data_array = null;
    if(conn != null)
    {
        Statement query;
        try 
        {
            query = conn.createStatement();

            String sql = "SELECT data_x FROM table_x";
            ResultSet result = query.executeQuery(sql);

            result.next();
            int count = result.getInt("data_x");
            result.close();

            data_array = new String[count];

            for (int x = 1; x <= count; x++)
            {
                String data_x = result.getString(x);
                data_x_array[x] = data_x;
            }
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
    }
    return data_x_array;
}

Quand je compile juste:

Invalid value for getInt() - 'value_in_table'

Quelqu'un sait ça?

Salutations!

6
user3683881

Une dernière chose que tout le monde a oublié de mentionner

String[] data_array = new String[999];
for (int x = 0; x <= 999; x++){}

lancera une exception ArrayIndexOutOfBoundsException. Solution possible

String[] data_array = new String[999];
for (int x = 0; x < 999; x++){}
6
SparkOn

Vous avez défini votre variable dans la boucle while, c’est-à-dire qu’elle n’est pas visible pour l’instruction return. De plus, vous avez défini votre méthode comme étant static void, ce qui signifie qu'aucune valeur de retour n'est attendue. Utilisez static String [] à la place.

3
davek

Votre déclaration de String[] ne se trouve pas dans la même portée que l'instruction return.

Vous devez le déclarer au début de la portée.

Et vous devez changer l'en-tête de la fonction pour:

public static String[] get_data()
2
ranifisch

Comme il n'est pas accessible en dehors du bloc de la boucle while, compile se plaint du même problème ..__

public static String[] get_data()
{
conn = getInstance();
String[] data_array = null;
if(conn != null)
{
    Statement query;
    try 
    {
        query = conn.createStatement();

        String sql = "SELECT data_x FROM table_x";
        ResultSet result = query.executeQuery(sql);

        while (result.next()) 
        {
            String data_x = result.getString("data_x");
            data_array = new String[999];
            for (int x = 0; x <= 999; x++)
            {
                data_array[x] = data_x;
            }
        }
    } 
    catch (SQLException e) 
    {
        e.printStackTrace();
    }
}
return data_array;
}
2
SMA

Il y a deux choses à corriger ici:

public static void get_data()

Cette méthode est déclarée pour ne rien renvoyer. Changez le en:

public static String[] get_data()

Votre variable String[] data_array est déclarée dans la boucle while, elle n’y est donc connue que. Votre déclaration return est en dehors de cette boucle, elle n'y a donc pas accès.

Déplacez la variable en dehors de la boucle:

String sql = "SELECT data_x FROM table_x";
ResultSet result = query.executeQuery(sql);
String[] data_array = new String[999];

Notez que vous devez déplacer la déclaration et l'initialisation en dehors de la boucle while. Sinon, vous écraserez les données précédemment stockées de ce tableau en l'initialisant à nouveau. Et aussi, gardez à l'esprit que votre boucle for écrasera les données actuelles de toute façon ... vous devriez penser à stocker les données de ligne dans un autre tableau afin de les perdre.

1
Tom