Я хотел бы предложить, что вы никогда не , никогда, строить запросы на String
с. Используйте PreparedStatement
.
Теперь, с этим в сторону. Вам нужно сначала запросить базу данных, чтобы узнать, содержит ли она требуемое значение, если оно не вставляет его.
Переместите эту логику в отдельный метод для ясности. И всегда закрывайте ресурсы в блоке finally
, иначе вы получите утечку памяти, если есть Exception
. Я использовал конструкцию try-with-resources Java 7.
public boolean insertIfNotPresent(final Connection con, final String value) throws SQLException {
final String checkQuery = "SELECT COUNT(*) FROM router where hostname='Edge 01' and version=2700 and address=?";
try (final PreparedStatement statement = con.prepareStatement(checkQuery)) {
statement.setString(1, value);
try (final ResultSet resultSet = statement.executeQuery()) {
if (resultSet.next() && resultSet.getInt(1) > 0) {
return false;
}
}
}
final String insertQuery = "INSERT INTO router SET hostname='Edge 01', version=2700, address=?";
try (final PreparedStatement statement = con.prepareStatement(insertQuery)) {
statement.setString(1, value);
statement.executeUpdate();
}
return true;
}
Таким образом, первый запрос, SELECT COUNT(*) ...
, подсчитывает строки, соответствующие критериям. Если в базе уже есть что-то, мы возвращаем false
.
Второй запрос содержит вставку, если мы не вернули false
из первой части. В этом случае метод возвращает true
.
В качестве примера в приведенном выше коде, что-то вроде следующего будет работать
try(final Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+db, "root", "123456")) {
insertIfNotPresent(conn, jTextField1.getText());
insertIfNotPresent(conn, jTextField2.getText());
}
у вас есть инъекции SQL уязвимость. – SLaks
Вы ищете чудеса оператора 'if'. (с опрыскиванием сравнения строк) – SLaks
Другими словами, что вы пробовали? Какая у вас проблема? – SLaks