我已经实现了一个在SQL数据库上返回查询结果的方法。 我只是希望该方法只返回一个String [],它是在db上选择列的查询的结果。 这是我的代码:
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对象中)
答案 0 :(得分:2)
为什么不拨打v.toArray(new String[0])
?
答案 1 :(得分: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);
,其中x
是从一开始的索引。
而不是v.toArray(new String[v.size()]);
您也可以使用v.toArray(new String[0]);
。两者之间的区别在于前者返回您作为参数传递的数组,而后者在内部创建一个新数组并返回该数组。
答案 2 :(得分: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);
答案 3 :(得分:0)
在ArrayList上,您可以调用toArray()来获取其值的数组。
这看起来像这样:
// 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);
您可以在Java Docu for ArrayList.toArray()中查找更多详情。