[英]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.