У меня есть код ниже, который использует статические объекты 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();
}
}
Спасибо заранее.
Поделитесь своими случаями, в которых вы можете нарушить приведенный выше код, и задать вопрос о его безопасности.
Обновление:
Обновление только для того, чтобы никто не использовал статические поля, как я использовал в вышеприведенной программе, потому что вышеприведенная программа содержит ошибку при развертывании на сервере dev.
После использования приведенного выше кода на больших системах я обнаружил ошибку. месяц назад у меня не было проблем с приведенным выше кодом, и он работал нормально, но сегодня я нашел ошибку.
Ошибка:
После попадания в мои API 6-7 раз он перестал давать ответ при 8-м попадании. Я действительно не знаю почему и понятия не имею о дырках в программе.
Но теперь, когда я принял ответ, я изменил свой исходный код и начал использовать в своем коде ресурсы try-with и удалил статические поля.
Но мне все еще интересно узнать об ошибке, обнаруженной в приведенном выше коде.
это не дает ответа и зависает после 7-8 попаданий API.
Пожалуйста, поделитесь своими мыслями по этому поводу. Я использую сервер Apache Tomcat 8.5.32.
Заранее спасибо.