Russian Qt Forum
Ноябрь 27, 2024, 20:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как экранировать одинарную кавычку для SQLite  (Прочитано 26730 раз)
wolfut
Гость
« : Сентябрь 28, 2011, 14:18 »

Доброго времени суток!

Как экранировать одинарные кавычки, которые содержатся в строке, вставляемой в базу данных?

.replace(QString("'"),QString("\'")) и .replace(QString("'"),QString("\\'")) не работают((
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Сентябрь 28, 2011, 14:29 »

Use the QSqlQuery::bindValue, Luke!
Костыль этот не нужен тебе.
Записан
andrew.k
Гость
« Ответ #2 : Сентябрь 28, 2011, 16:07 »

а зачем их экранировать? и так должно все работать.

q.prepare ( "select * from table where name='value'" ) ;
Записан
Rem Norton
Гость
« Ответ #3 : Сентябрь 28, 2011, 22:47 »

Кавычки в SQLite экранируются такими же кавычками. Например:
Код:
insert into table (txt) values ("Never say ""never"""); -- вставится: Never say "never"
insert into table (txt) values ('Don''t cry'); -- вставится Don't cry
Записан
andrew.k
Гость
« Ответ #4 : Сентябрь 29, 2011, 09:54 »

речь то шла о коде C++, а не о запросе SQL
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Сентябрь 29, 2011, 10:03 »

речь то шла о коде C++, а не о запросе SQL
O RLY?
Тема: Как экранировать одинарную кавычку для SQLite
Записан
andrew.k
Гость
« Ответ #6 : Сентябрь 29, 2011, 10:09 »

а ты только тему прочитал или сообщение от топикстартера тоже?

Не замечал, что название топиков очень часто не соответствуют содержанию?
Например, QProcess особенности
Записан
Rem Norton
Гость
« Ответ #7 : Сентябрь 29, 2011, 10:53 »

Спор ниачом! Вопрос задан, ответ получен. Далее 2 варианта развития событий:
1. Топикстартер читает внимательно, включает мозг и будет ему счастье.
2. Топикстартер игнорирует информацию и это уже его проблемы.
Записан
wolfut
Гость
« Ответ #8 : Сентябрь 29, 2011, 13:19 »

Тема всё-таки соответствует содержанию, я написал "для SQLite" а не "в SQLite", ну да ладно.........проблема в следующем есть текст, например: 

QString maintext = "Noch'. Ulica. Fonar'."

Его нужно записать в базу:

QString sql = QString("INSERT INTO mtable (aText) Values('%1')").arg(maintext);
QSqlQuery query;
query.exec(sql);

Как подготовить переменную maintext, что бы запрос выполнился без ошибки?
Записан
Nimbus
Гость
« Ответ #9 : Сентябрь 29, 2011, 13:21 »

Тема всё-таки соответствует содержанию, я написал "для SQLite" а не "в SQLite", ну да ладно.........проблема в следующем есть текст, например: 

QString maintext = "Noch'. Ulica. Fonar'."

Его нужно записать в базу:

QString sql = QString("INSERT INTO mtable (aText) Values('%1')").arg(maintext);
QSqlQuery query;
query.exec(sql);

Как подготовить переменную maintext, что бы запрос выполнился без ошибки?
QString maintext = "Noch''. Ulica. Fonar''."
Хотя бы так
Записан
wolfut
Гость
« Ответ #10 : Сентябрь 29, 2011, 13:25 »

Нэт, так не пойдет мне нужно, что бы базе хранился именно исходный текст c одинарными кавычками: Noch'. Ulica. Fonar'. 
Записан
Nimbus
Гость
« Ответ #11 : Сентябрь 29, 2011, 13:29 »

Нэт, так не пойдет мне нужно, что бы базе хранился именно исходный текст c одинарными кавычками: Noch'. Ulica. Fonar'. 
'' != " присмотрись сам Подмигивающий Там два апострофа. При выполнении запроса они нужны, а в базу лягут уже по одному
Записан
wolfut
Гость
« Ответ #12 : Сентябрь 29, 2011, 13:35 »

А точно, я подумал ты написал там ", а не ''.  Спасибо!!
Записан
andrew.k
Гость
« Ответ #13 : Сентябрь 29, 2011, 13:36 »

Тема всё-таки соответствует содержанию, я написал "для SQLite" а не "в SQLite", ну да ладно.........проблема в следующем есть текст, например: 

QString maintext = "Noch'. Ulica. Fonar'."

Его нужно записать в базу:

QString sql = QString("INSERT INTO mtable (aText) Values('%1')").arg(maintext);
QSqlQuery query;
query.exec(sql);

Как подготовить переменную maintext, что бы запрос выполнился без ошибки?
Тебе же уже ответили bindValue
Код
C++ (Qt)
QString maintext = "Noch'. Ulica. Fonar'."
QString sql = QString("INSERT INTO mtable (aText) Values(:v)");
QSqlQuery query;
query.prepare (sql) ;
query.bindValue (":v", maintext) ;
query.exec(sql);
 

Записан
andrew.k
Гость
« Ответ #14 : Сентябрь 29, 2011, 13:37 »

Спор ниачом! Вопрос задан, ответ получен. Далее 2 варианта развития событий:
1. Топикстартер читает внимательно, включает мозг и будет ему счастье.
2. Топикстартер игнорирует информацию и это уже его проблемы.
Лень спорить с тобой, умник.
« Последнее редактирование: Сентябрь 29, 2011, 13:43 от andrew.k » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.167 секунд. Запросов: 22.