У меня есть код ниже, который использует статические объекты BasicDataSource, Sql Connection, Statement и ResultSet. Приведенный ниже код работает нормально, но я просто хочу знать о безопасности использования таких методов кодирования. или как я могу оптимизировать приведенный ниже код, чтобы он стал более стабильным и надежным.
public class Testing {
static BasicDataSource bds = DBConnection.getInstance().getBds();
static Connection con = null;
static PreparedStatement stmt = null;
static ResultSet rs = null;
private void show() {
try {
con = bds.getConnection();
stmt = con.prepareStatement("SELECT * FROM users");
rs = stmt.executeQuery();
if(rs.next()) {
System.out.println(rs.getString("firstname") + " " + rs.getString("lastname"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void display() {
try {
con = bds.getConnection();
stmt = con.prepareStatement("SELECT * FROM agent_cities");
rs = stmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getString("city_name"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void add() {
try {
con = bds.getConnection();
stmt = con.prepareStatement("UPDATE users SET firstname = 'shsh' WHERE id = 2");
stmt.executeUpdate();
System.out.println("updated successfully");
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Testing t = new Testing();
t.show();
t.display();
t.add();
}
}
Заранее спасибо. Поделитесь своими случаями, когда вы можете сломать код выше, и задайте вопрос о его безопасности.
Обновление: Обновление только для того, чтобы гарантировать, что никто не должен использовать статические поля, как я использовал в приведенной выше программе, потому что указанная выше программа содержит ошибку при развертывании на сервере разработки.
После использования приведенного выше кода в больших системах я обнаружил ошибку. месяц назад у меня не было проблем с приведенным выше кодом, и он работал нормально, но сегодня я обнаружил ошибку.
Ошибка:
После 6-7 ударов по моим API он перестал давать ответ на 8-м ударе. я действительно не знаю почему и понятия не имею о лазейках, присутствующих в программе. Но теперь, когда я принял ответ, я изменил свой исходный код и начал использовать ресурсы try-with в своем коде и удалил статические поля.
Но мне все еще любопытно узнать об ошибке, которую я нашел в приведенном выше коде. который не дает ответа и зависает после 7-8 обращений к API. Пожалуйста, поделитесь своими мыслями по этому поводу. Я использую сервер Apache Tomcat 8.5.32. Заранее спасибо.