Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356

QSqlDataBase

26.02.2012, 00:58. Показов 1791. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется таблица. Таблицу мне нужно перенести в БД и почистить.
Имеется кусман кода, выполняющий эти действия

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
QTableWidget *tab = this->findChild< QTableWidget * >("table");
 
    for( int i = 0; i < tab->rowCount(); i++ )
    {
        sqlQuery =
                "INSERT INTO Diagram_" + QString::number(diagramId);
        sqlQuery += QString("(WaveLen, Intensity) VALUES (%1, %2);")
                .arg(tab->item(i, 0)->text())
                .arg(tab->item(i, 1)->text());
        dbaseQuery.exec(sqlQuery);
        delete tab->item(i, 1);
        delete tab->item(i, 2);
    }
Копируется около 150 значений.
Собственно сабж:
Процедура занимает около полутора секунд (учитывая создание новой таблицы под данную структуру данных).
На мой взгляд это крайне долго...
Таблица кстати описана как двуграфовая, тип REAL.
Есть ли способы для данного класса записать сразу большой кусман значений, без лишних обращений?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2012, 00:58
Ответы с готовыми решениями:

QSqlDataBase
Привет! Существует проект (GUI приложение), в котором используется БД SQLite (инклуды: QSqlDataBase, QSqlQuery). Компилится,...

QSqlDatabase
День добрый. Работаю с БД. Следующим образом создаю (и/или открываю) файл БД: if (!QSqlDatabase::contains()) { b =...

QSqlDatabase
Привет. Работаю с СУБД sqlite3. Описание конструктора класса, который осуществляет непосредственную работу с БД. ...

13
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
26.02.2012, 11:40
Не знаю, как для других БД, но для MySQL можно сразу передавать по несколько строк... например
SQL
1
INSERT INTO tab VALUES (1.1, 1.2), (2.1, 2.2), (3.1, 3.2), (4.1, 4.2)
Например, такой запрос передаст сразу 4 строки... и это будет значительно быстрее, чем записывать их по одной.
1
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 11:56  [ТС]
Нет, к сожалению sqlite не позволяет положить в БД более одной строки за раз(
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.02.2012, 17:57
ваш кусман кода не безопасен, так не хорошо делать
0
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 18:02  [ТС]
Если это на счет возможного отсутствия QTableWidget, то да, я осознаю риск)
Если это на счет delete, то он вполне спокойно реагирует на нулевые указатели.
Если на счет того, что после delete я не обнуляю указатели, то да, про это я забыл, сейчас исправлю.
Если на счет того, что запрашиваю текст, не проверив существование ячейки, то это у меня схвачено и отработано, просто не стад сюда включать, чтоб не загромождать всякой ересью.


Если есть еще какие небезопасные участки, покажите пальцем
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.02.2012, 18:07
нет обработки строк, которые ты ставишь в SQL запрос, а что если строка будет содержать SQL оператор? Все в жизни бывает...
1
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 18:10  [ТС]
Я ограничил ввод циферками с точечкой)
Так что все нормально.
Если злоумышленник захочет что то сделать с таблицей, он может просто открыть dataBase.db с помощью sqlite3.exe =)
Но спасибо!
Интересное замечание. Впредь буду иметь в виду)
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
26.02.2012, 18:13
Правильнее было бы так:
C++
1
2
3
4
dbaseQuery.prepare("INSERT INTO Diagram_"+QString::number(diagramId)+" (WaveLen, Intensity) VALUES (?,?)");
dbaseQuery.addBindValue(tab->item(i, 0)->text().toFloat); // вместо первого вопросительного знака
dbaseQuery.addBindValue(tab->item(i, 1)->text().toFloat); // вместо второго
dbaseQuery.exec(); // и выполняем сам запрос с уже подставленными значениями
При этом addBindValue подставит экранирование, если потребуется. Но в данном случае мы ещё насильно приводим к типу float

Немного опоздал.
1
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 18:15  [ТС]
Да, знаем эту фишку... Тоже спасибо...
К сожалению мы с ней сразу не подружились.
Исправить нужно, знаю. Но сейчас немного другим занят)
Спасибо.
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.02.2012, 18:19
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
Я ограничил ввод циферками с точечкой)
Так что все нормально.
Если злоумышленник захочет что то сделать с таблицей, он может просто открыть dataBase.db с помощью sqlite3.exe =)
Но спасибо!
Интересное замечание. Впредь буду иметь в виду)
в данном конкретном случае может и не критично, но пользователи такие бывают что диву даешься, так что имей ввиду..
0
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 18:20  [ТС]
=D
Вроде усе учел)
0
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
26.02.2012, 18:23
почитай на досуге Питера Гудлифа "Ремесло программиста. //практика написания хорошего кода" занятная книга..
1
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
26.02.2012, 18:24  [ТС]
Окей... Название интригует.
Дочитаю вот Ассемблер и, думаю, возьмусь)
0
26.02.2012, 18:28

Не по теме:

Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
Окей... Название интригует.
Дочитаю вот Ассемблер и, думаю, возьмусь)
звучит то как....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2012, 18:28
Помогаю со студенческими работами здесь

QSqlDatabase
Привет. Есть организационный вопрос по кутэшным базам... У данного класса имеется возможность подключиться к базе с логин-паролем. ...

QSqlDatabase не работает
QSqlDatabase sdb; pro file: QT += core gui sql При создании sdb ловлю ошибку линкера, unresolved external symbol. В чем проблема? ...

QSqlDatabase Не закрывает БД
Доброго времени суток, необходимо написать программу для управления БД, но столкнулся с проблемой что сначала все прописал норм работает...

QSqlDatabase::addDatabase
Добрый день. Опять я. Теперь такой вопрос: Я не совсем пока понял принцип работы с базами данных в Qt. Но у меня такая проблема: Я...

QSqlDatabase + SQLITE
У меня возникла проблема. Не критичная, но если объясните причину - буду очень благодарен. Создаю подключение к базе SQLITE через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru