2014-10-19 4 views
6

Ho creato questo frammento:java - Array restituito dal metodo

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

Ho appena creato una classe, in cui i dati dal database sono raccolti in un array.

Ora voglio solo restituire l'array da questo metodo.

ma quello che ottengo è:

data_array cannot be resolved to a variable 

Qualcuno mi potrebbe aiutare?

Saluti!

UPDATE:

ho cambiato frammento di:

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

Quando compilo semplicemente:

Invalid value for getInt() - 'value_in_table' 

Qualcuno conosce questo?

Saluti!

+3

'data_array' non è nello stesso ambito come' ritorno (data_array); ' – August

+0

si dichiara data_array ma tenta di utilizzare data_x_array – kiwixz

risposta

2

La dichiarazione dello String[] non è nello stesso ambito dell'istruzione return.

È necessario dichiararlo all'inizio dello scope.

ed è necessario modificare l'intestazione della funzione da:

public static String[] get_data() 
3

Hai definito la variabile all'interno del ciclo while vale a dire che non è visibile per la dichiarazione return. Inoltre, hai definito il tuo metodo come static void, il che significa che non è previsto alcun valore di ritorno. Utilizzare invece static String [].

+0

Aggiornato il mio post, si potrebbe fare riferimento ad esso? – user3683881

2

Poiché non è accessibile al di fuori del blocco del ciclo while, la compilazione si lamenta dello stesso. Prova questo:

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

Ci sono due cose da sistemare qui:

public static void get_data() 

Questo metodo viene dichiarata per restituire nulla. Cambiarlo in:

public static String[] get_data() 

La variabile String[] data_array è dichiarata nel ciclo while, quindi è conosciuta solo lì. La tua dichiarazione di reso è al di fuori del ciclo, quindi non ha accesso ad essa.

spostare la variabile all'esterno del ciclo:

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

mente che è necessario spostare la dichiarazione e l'inizializzazione di fuori del ciclo while, altrimenti si sovrascrivere i dati precedentemente memorizzati di quella matrice inizializzando nuovamente. Inoltre, il tuo ciclo for sovrascriverà comunque i dati correnti ... dovresti pensare a memorizzare i dati delle righe in un altro array, altrimenti andrà perso.

6

Un'altra cosa che tutti dimenticato di citare

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

getterà un ArrayIndexOutOfBoundsException. Possibile soluzione

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