Я предлагаю альтернативную версию для toString()
для класса кошелька, возможно, более компактную:
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
sb.append(checkValue(this.Name,","));
sb.append(checkValue(this.Location,","));
sb.append(checkValue(this.Tag,","));
sb.append(checkValue(this.Reader,""));
sb.append("]");
return sb.toString();
}
protected String checkValue(String value, String separator) {
return (value != null && !value.equals("unknown")) ? (value+separator) : "";
}
Более того, сначала я предлагаю использовать CamelCase для записи имен методов, переменных, классов, пакетов и констант. : это стандартная запись (вы не обязаны, она работает так же, но это более понятно для сообщества разработчиков). Поэтому было бы лучше, если бы каждое слово или аббревиатура начиналось с заглавной буквы или первого слова со строчной буквы, а все оставалось с заглавной буквы. Во-вторых, я предлагаю пользователю PreparedStatement вместо простого Statement, потому что это предпочтительнее по соображениям безопасности: динамическое построение Statement уязвимо для внедрения SQL-кода (а с помощью PreparedStatement вы можете избежать синтаксических ошибок, возникающих при цитировании значений в предикатах).
Таким образом, вместо:
String query = "SELECT Name FROM wallets WHERE Location ='" + Location + "' ;";
Вы можете попытаться использовать:
String query = "SELECT Name FROM wallets WHERE Location = ? ";
вместе с чем-то вроде (при условии, что conn
это ваше соединение с БД):
try {
String query = "SELECT Name FROM wallets WHERE Location = ? ";
try (PreparedStatement stmt = conn.prepareStatement(query); ResultSet resultset = stmt.executeQuery(query)) {
while (resultset.next()) {
String Name = resultset.getString("Name");
WalletsList.add(new wallet(Name));
}
}
} catch (SQLException sQLException) {
sQLException.printStackTrace();
}
Обратите внимание, что я использовал синтаксис try-with-resource, чтобы избежать проблем с закрытием результирующего набора и операторов (т. Е. Предложение finally с resultset.close (), stament.close () и т. Д., Которое является многословным, а иногда иможет привести к некоторым ошибкам кодирования, если не будет правильно встречаться).
Лучше всего это будет