このスニペットを作成しました:
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'
誰もがこれを知っていますか?
ご挨拶!
誰もが言及するのを忘れていたもう一つ
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++){}
while
ループ内で変数を定義しました。つまり、return
ステートメントからは見えません。さらに、メソッドをstatic void
として定義しました。これは、戻り値が予期されないことを意味します。代わりにstatic String []
を使用してください。
String[]
の宣言は、returnステートメントと同じスコープ内にありません。
スコープの先頭で宣言する必要があります。
また、関数のヘッダーを次のように変更する必要があります。
public static String[] get_data()
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つあります。
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
ループは現在のデータを上書きすることに注意してください...行データを別の配列に保存することを検討する必要があります。そうしないと失われます。