2014-10-19 28 views
6

返回阵列我建立这个片段:的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 

任何人能帮助我吗?

问候!

UPDATE:

我改变了代码段:

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' 

任何人都知道这一点?

问候!

+3

'data_array'不在同一范围'回报(data_array中);' – August 2014-10-19 16:24:48

+0

您声明data_array中,但尝试使用data_x_array – kiwixz 2014-10-19 17:19:03

回答

2

您声明的String[]与返回语句不在同一范围内。

您需要在范围的开头声明它。

而你需要的功能的标题更改为:

public static String[] get_data() 
3

您已经定义了while环即内您的变量是不给return声明可见。另外,您已将方法定义为static void,这意味着不会返回任何值。改为使用static String []

+0

更新我的帖子,你能参考一下吧? – user3683881 2014-10-19 16:59:18

2

由于它在while循环的块之外不可访问,因此compile的抱怨也是一样的。 试试这个:

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

有两件事情在这里解决:

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循环会覆盖当前的数据......您应该考虑将行数据存储在另一个数组中,否则它将丢失。

6

一个大家件事忘了提

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++){}