Я бы использовал 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]
Здесь вы должны абсолютно использовать подготовленный оператор, который бы справлялся с проблемой правильного экранирования одной кавычки при вставке. Что-то вроде этого:
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);
Но я не рекомендую это делать, потому что это может иметь неприятные последствия в зависимости от того, сколько одиночных кавычек у вас уже есть. Использование подготовленного оператора - лучший способ пойти.
вам следует избегать «с двойной одинарной кавычкой», прежде чем использовать это значение в вашей строковой композиции
txtFd_name.getText()
присвойте значение строковой переменной, а затем замените «на» (дважды) и он должен работать.
см. здесь для примера: Escape символ одиночной кавычки для использования в SQLite-запросе
, если это был sql-сервер и .NET Я бы предложил использовать параметры запроса или команды, не уверенные в java и sqlite
В этом случае вам лучше использовать String.format()
класса String . Это предотвратит наличие синтаксических агентов SQL, например
String.format("INSERT INTO Projektname(projektname) VALUES('%s');", txtFd_name.getText()));
Я исправлю это письмо двумя 'вместо одного. Что-то вроде этого:
Main.execute("INSERT INTO Projektname(projektname) VALUES(''" + txtFd_name.getText() + "'');");
pstmt.executeUpdate();
– Codo 13 July 2018 в 11:52preparedStatement
сейчас – Builder_20 13 July 2018 в 12:02