2014-10-19 13 views
6

Stworzyłem ten fragment:java - tablica powrót z metody

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

Właśnie stworzyliśmy klasę, gdzie dane z bazy danych zbieranych w tablicy.

Teraz chcę tylko zwrócić tablicę z tej metody.

Ale to, co pojawia się:

data_array cannot be resolved to a variable 

ktoś mógłby mi pomóc?

Pozdrowienia!

UPDATE:

zmieniłem fragment do:

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

kiedy mogę skompilować tylko:

Invalid value for getInt() - 'value_in_table' 

Ktoś wie tego?

Pozdrowienia!

+3

'data_array' nie jest w takim samym zakresie jak' powrotnej (data_array); ' – August

+0

zadeklarować data_array ale spróbuj użyć data_x_array – kiwixz

Odpowiedz

2

Twoja deklaracja String[] nie jest w tym samym zakresie co instrukcja return.

Należy zadeklarować ją na początku zakresu.

i trzeba zmienić nagłówek funkcji do:

public static String[] get_data() 
3

Zdefiniowano zmienną wewnątrz pętli while to znaczy nie jest widoczny w rachunku return. Dodatkowo zdefiniowałeś swoją metodę jako static void, co oznacza, że ​​nie oczekuje się wartości zwracanej. Zamiast tego użyj static String [].

+0

Updated mój post, można odwołać się do niego? – user3683881

2

Ponieważ nie jest dostępny poza blokiem pętli while, kompilacja narzeka na to samo. Spróbuj tego:

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

Są dwie rzeczy, aby naprawić tutaj:

public static void get_data() 

Ta metoda jest deklarowane, aby powrócić nic. Zmień go na adres:

public static String[] get_data() 

zmiennej String[] data_array jest zadeklarowana w pętli while, dlatego jest on znany tylko tam. Twoja instrukcja return znajduje się poza tą pętlą, więc nie ma do niej dostępu.

Przenieś zmienną poza pętlą:

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

pamiętać, że trzeba przenieść deklaracji i inicjalizacji poza pętlą while, lub będzie zastąpienie wcześniej zapisane dane z tej tablicy przez inicjowanie go ponownie. Pamiętaj też, że twoja pętla for nadpisze aktualne dane ... powinieneś pomyśleć o przechowywaniu danych wiersza w innej tablicy, albo zostanie utracona.

6

jeszcze jedno wszyscy zapomnieli wspomnieć

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

wygeneruje ArrayIndexOutOfBoundsException. możliwym rozwiązaniem

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