2

我已经实现了一个返回 SQL 数据库查询结果的方法。我只希望该方法仅返回一个 String[],它是在数据库中选择一列的查询的结果。这是我的代码:

public class DBConnection {
private static Connection con;
private static Statement st;
private static ResultSet rs;

    try
    {   
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password");
        st = con.createStatement();
    }

    catch (Exception ex)
    {
        System.out.println("Error: "+ex);
    }
public ArrayList<String[]> doQuery (String query)
{
      ArrayList<String[]> v = null;
      String [] record;
      int columns = 0;
      try {
         Statement stmt = con.createStatement();    
         ResultSet rs = stmt.executeQuery(query);   
         v = new ArrayList<String[]>();
         ResultSetMetaData rsmd = rs.getMetaData(); 
         columns= rsmd.getColumnCount();            

         while(rs.next()) {   
            record = new String[columns]; 
            for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1); 
            v.add( (String[]) record.clone() );
         }
         rs.close();     
         stmt.close();   
      } catch (Exception e) { e.printStackTrace(); }

      return v;
   }    

此方法返回一个包含查询结果的 ArrayList 对象。现在,问题是:我怎样才能从这个 ArrayList 对象中获得一个只包含结果列的 String[] 对象?

(作为信息:String[] 对象将被插入到 JComboBox 对象中)

4

4 回答 4

2

为什么不打电话v.toArray(new String[0])

于 2013-09-09T13:26:26.733 回答
2

我假设您的问题有两个组成部分:a)您想返回一个字符串数组,b)您只想返回一个列。

a) 的答案已经给出或至少暗示过。
b) 的答案将要求您知道要返回或调整查询的列的名称。

你可能会改变你的方法是这样的:

public String[] doQuery (String query, String columnName) //columnName not needed if you know the index of the column or if the name is always the same, in which case it could be some constant
{
  List<String> v = new ArrayList<String>();

  try {
     Statement stmt = con.createStatement();    
     ResultSet rs = stmt.executeQuery(query);           

     while(rs.next()) {    
        v.add( rs.getString(columnName) ); //or rs.getString(1); if you know the column is the first in the query's result
     }
     rs.close();     
     stmt.close();   
  } catch (Exception e) { e.printStackTrace(); }

  return v.toArray(new String[v.size()]); 
}    

几点注意事项:

  • 您必须确保该列具有您要查询它的名称,即您不能这样做select columnA from ...然后调用rs.getString("columnB");. 如果您不知道名称但知道结果集中列的索引,请rs.getString(x);改用 wherex是从 1 开始的索引。

  • 而不是v.toArray(new String[v.size()]);你也可以使用v.toArray(new String[0]);. 两者的区别在于前者返回作为参数传递的数组,而后者在内部创建一个新数组并返回该数组。

于 2013-09-09T13:35:57.493 回答
0

粘贴链接Converting 'ArrayList<String> to 'String[]' in Java

ArrayList<String> list = new ArrayList<String>();
String[] array = list.toArray(new String[list.size()]);

(或者)

ArrayList<String> arrayList = new ArrayList<String>(); 
Object[] ObjectList = arrayList.toArray();
String[] StringArray = Arrays.copyof(ObjectList,ObjectList.length,String[].class);
于 2013-09-09T13:28:42.980 回答
0

在 ArrayList 上,您可以调用 toArray() 来获取其值的 Array。

这看起来像这样:

// create an ArrayList
ArrayList<String> theArrayList = new ArrayList<String>();
theArrayList.add("aString");
theArrayList.add("anotherString");

// get its contents as an Array
String[] theArray = new String[theArrayList .size()];
theArray = theArrayList.toArray(theArray);

您可以在ArrayList.toArray()的 Java 文档中查找更多详细信息。

于 2013-09-09T13:40:33.133 回答