From an ArrayList to a String []
本问题已经有最佳答案,请猛点这里访问。
我实现了一个方法,它返回SQL数据库查询的结果。我只希望方法只返回一个字符串[],该字符串是在数据库上选择列的查询的结果。这里是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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[]对象?
(作为信息:字符串[]对象将插入JComboBox对象中)
我假设您的问题有两个组件:a)您想要返回一个字符串数组,b)您想要只返回一个列。
答案a)已经给出或至少暗示过。对b)的回答要求您知道要返回或调整查询的列的名称。
您可以将方法更改为如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); ,其中x 是基于该列的索引。你也可以使用
v.toArray(new String[0]); ,而不是v.toArray(new String[v.size()]); 。两者的区别在于前者返回作为参数传递的数组,而后者在内部创建一个新数组并返回该数组。
为什么不打电话给
在ArrayList上,可以调用ToArray()以获取其值的数组。
如下所示:
1 2 3 4 5 6 7 8 |
您可以在Java DOCU中查找更多关于ArayList.toAlay.()的详细信息。
将Java中的链接转换"AlrayList< String"给出的解决方案粘贴到"String"中
1 2 |
(或)
1 2 3 |