SQL Insert with '

Я бы использовал regexp:

>>> import re
>>> re.findall(r'\d+', 'hello 42 I\'m a 32 string 30')
['42', '32', '30']

Это также соответствует 42 из bla42bla. Если вам нужны только числа, ограниченные границами слов (пробел, период, запятая), вы можете использовать \ b:

>>> re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')
['42', '32', '30']

. В итоге список строк вместо списка строк:

>>> [int(s) for s in re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')]
[42, 32, 30]
1
задан Builder_20 13 July 2018 в 11:46
поделиться

4 ответа

Здесь вы должны абсолютно использовать подготовленный оператор, который бы справлялся с проблемой правильного экранирования одной кавычки при вставке. Что-то вроде этого:

String sql = "INSERT INTO Projektname(projektname) VALUES(?)";

try (Connection conn = this.connect();
    PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, txtFd_name.getText());
        pstmt.executeUpdate();
} catch (SQLException e) {
    System.out.println(e.getMessage());
}

Если вы должны продолжить свой текущий подход, вы можете попробовать вручную удвоить все одинарные кавычки. Поэтому может сделать вашу текущую работу вставки:

String name = txtFd_name.getText().replaceAll("'", "''");
String sql = "INSERT INTO Projektname(projektname) VALUES('" + name + "');");
Main.execute(sql);

Но я не рекомендую это делать, потому что это может иметь неприятные последствия в зависимости от того, сколько одиночных кавычек у вас уже есть. Использование подготовленного оператора - лучший способ пойти.

8
ответ дан Tim Biegeleisen 17 August 2018 в 13:02
поделиться
  • 1
    Вам не хватает pstmt.executeUpdate(); – Codo 13 July 2018 в 11:52
  • 2
    @Codo Это чудо, что мы не все делаем здесь больше ошибок, чем мы уже делаем :-) – Tim Biegeleisen 13 July 2018 в 11:53
  • 3
    твой, я буду использовать preparedStatement сейчас – Builder_20 13 July 2018 в 12:02

вам следует избегать «с двойной одинарной кавычкой», прежде чем использовать это значение в вашей строковой композиции

txtFd_name.getText()

присвойте значение строковой переменной, а затем замените «на» (дважды) и он должен работать.

см. здесь для примера: Escape символ одиночной кавычки для использования в SQLite-запросе

, если это был sql-сервер и .NET Я бы предложил использовать параметры запроса или команды, не уверенные в java и sqlite

0
ответ дан Davide Piras 17 August 2018 в 13:02
поделиться

В этом случае вам лучше использовать String.format() класса String . Это предотвратит наличие синтаксических агентов SQL, например

String.format("INSERT INTO Projektname(projektname) VALUES('%s');", txtFd_name.getText()));
0
ответ дан Matthias Reumann 17 August 2018 в 13:02
поделиться
  • 1
    Это просто неправильно - здесь это не поможет. – Hulk 13 July 2018 в 13:08

Я исправлю это письмо двумя 'вместо одного. Что-то вроде этого:

Main.execute("INSERT INTO Projektname(projektname) VALUES(''" + txtFd_name.getText() + "'');");
0
ответ дан Paplusc 17 August 2018 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: