web-dev-qa-db-ja.com

java-メソッドから配列を返す

このスニペットを作成しました:

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;
}

データベースからのデータが配列に収集されるクラスを作成しました。

今、私はこのメソッドから配列を返したいだけです。

しかし、私が得るのは:

data_array cannot be resolved to a variable

誰でも私を助けることができますか?

ご挨拶!

更新:

スニペットを次のように変更しました:

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;
}

私がちょうどコンパイルするとき:

Invalid value for getInt() - 'value_in_table'

誰もがこれを知っていますか?

ご挨拶!

6
user3683881

誰もが言及するのを忘れていたもう一つ

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

arrayIndexOutOfBoundsExceptionをスローします。可能な解決策

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

whileループ内で変数を定義しました。つまり、returnステートメントからは見えません。さらに、メソッドをstatic voidとして定義しました。これは、戻り値が予期されないことを意味します。代わりにstatic String []を使用してください。

3
davek

String[]の宣言は、returnステートメントと同じスコープ内にありません。

スコープの先頭で宣言する必要があります。

また、関数のヘッダーを次のように変更する必要があります。

public static String[] get_data()
2
ranifisch

Whileループのブロックの外ではアクセスできないため、コンパイルは同じことについて不平を言っています。これを試して:

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

ここで修正することが2つあります。

public static void get_data()

このメソッドは何も返さないと宣言されています。次のように変更します。

public static String[] get_data()

変数String[] data_arrayはwhileループで宣言されているため、そこでのみ認識されます。 returnステートメントはそのループの外側にあるため、アクセスできません。

変数をループの外側に移動します。

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

宣言と初期化をwhileループの外側に移動する必要があることに注意してください。そうしないと、その配列の以前に保存されたデータを再度初期化して上書きします。また、forループは現在のデータを上書きすることに注意してください...行データを別の配列に保存することを検討する必要があります。そうしないと失われます。

1
Tom