我正在尝试获取一行并将其转换为数组我alredy尝试将resultset.getArray()转换为ArrayList但由于某种原因它没有返回任何人帮助我这个
现在代码:public ArrayList<String> getReport(String name) {
try {
Statement sql = mySql.getConnection().createStatement();
ResultSet resultSet = sql.executeQuery("SELECT * FROM `reports` WHERE `reportedplayer`='" + name + "';");
if(!resultSet.next()) {
sql.close();
resultSet.close();
return null;
}
ArrayList<String> rowValues = new ArrayList<String>();
while (resultSet.next()) {
rowValues.add(resultSet.getString("reason"));
}
sql.close();
resultSet.close();
return rowValues;
}catch (SQLException e) {
e.printStackTrace();
return null;
}
}
答案 0 :(得分:1)
您应该从resultSet元数据中读取列名,然后迭代每行的名称。也许更好的想法是将参数存储为ArrayList<HashMap<String,String>>
而不是ArrayList<String>
,因为select *没有说明您阅读的文件的顺序。
但是如果你确定你只有一排,而且你知道订单,或者订单无关紧要,你可以使用这样的东西:
public ArrayList<String> getReport(String name) {
try {
Statement sql = mySql.getConnection().createStatement();
ResultSet resultSet = sql.executeQuery("SELECT * FROM `reports` WHERE `reportedplayer`='" + name + "';");
if(!resultSet.next()) {
sql.close();
resultSet.close();
return null;
}
ArrayList<String> rowValues = new ArrayList<String>();
int columnCount = resultSet.getMetaData().getColumnCount();
String[] columnNames = new String[columnCount];
for (int idx=0; idx<columnCount; idx++) {
columnNames[idx] = resultSet.getMetaData().getColumnName(idx);
}
while (resultSet.next()) {
for (String columnName: columnNames) {
rowValues.add(resultSet.getString(columnName));
}
}
sql.close();
resultSet.close();
return rowValues;
}catch (SQLException e) {
e.printStackTrace();
return null;
}
}
答案 1 :(得分:1)
你的专栏:
if (!resultSet.next())
在没有看第一行的情况下移动到第二行。您还应该有一个finally
块来处理关闭,以确保它始终正确执行。
try {
Statement sql = mySql.getConnection().createStatement();
ResultSet resultSet = sql.executeQuery("SELECT * FROM `reports` WHERE `reportedplayer`='" + name + "';");
List<String> rowValues = new ArrayList<String>();
while (resultSet.next()) {
rowValues.add(resultSet.getString("reason"));
}
return rowValues.isEmpty() ? null : rowValues;
} catch (SQLException e) {
e.printStackTrace();
return null;
} finally {
sql.close();
resultSet.close();
}
答案 2 :(得分:1)
resultSet.next()会将光标移动到下一行。 第一次在if条件下调用resultSet.next()时,它将指向第一行,当你再次调用resultSet.next()时,它将指向第二行。
因为你使用了两次resultSet.next(),所以你将把第二行放到列表中。如果表中只有一行,则列表中不会显示任何内容。
您可以关闭finally块中的连接,如下所示。
finally
{
try {
sql.close();
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}