[英]Java/MySql - getting a row and convert it to a arraylist<String>
我试图获取一行并将其转换为数组,但是我尝试将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;
}
}
您应该从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;
}
}
您的电话:
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();
}
resultSet.next()将光标移动到下一行。 第一次在if条件中调用resultSet.next()时,它将指向第一行;而在while条件中再次调用resultSet.next()时,它将指向第二行。
由于您两次使用resultSet.next(),因此将第二行向前放入列表。 如果表中只有一行,则列表中将不会有任何内容。
您可以在finally块中关闭连接,如下所示。
finally
{
try {
sql.close();
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.