Название: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 25, 2013, 15:46 Уважаемые господа, ответьте на простой вопрос.
QSqlQuery поддерживает множественную вставку в таблицы? Или нет? PS судя по моему бытию, не поддерживает, что очень странно. Или может есть какой обходной способ множественного добавления? Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Странник от Февраль 25, 2013, 15:53 Есть такой вариант.
Цитировать bool QSqlQuery::execBatch ( BatchExecutionMode mode = ValuesAsRows ) Executes a previously prepared SQL query in a batch. All the bound parameters have to be lists of variants. If the database doesn't support batch executions, the driver will simulate it using conventional exec() calls. Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 25, 2013, 17:50 Хм. печальненько что стандартный оператор не поддерживается. Попробую завтра с утреца (рабочий проект).
Огромное спасибо, даже и не подумал что функционал будет так спрятан. Название: Re: Sql в Qt (конкретно SQLite) Отправлено: carrygun от Февраль 26, 2013, 05:08 execBatch() вроде бы не поддерживается ни одним из драйверов бд в Qt. Там в сырцах банальная циклическая вставка, как написано в описании.
Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 26, 2013, 05:57 Увидим попозже :D через часика полтора :D
Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Странник от Февраль 26, 2013, 08:58 execBatch() вроде бы не поддерживается ни одним из драйверов бд в Qt. Там в сырцах банальная циклическая вставка, как написано в описании. SQLITE не поддерживает, да. Но ни одним - это вы погорячились. Поддержка этой фичи есть, к примеру, у OCI. Других действительно не припомню.Хм. печальненько что стандартный оператор не поддерживается. Попробую завтра с утреца (рабочий проект). Стандартный - это уровня SQL? Тогда все определяется непосредственно SQLITE, QSqlQuery вообще никаким боком. Многострочный INSERT поддерживается SQLITE с версии что-то около 3.7.11. В моем Qt 5.0.1, к примеру, из коробки идет версия 3.7.7, так что пряники пока недоступны. Как вариант, если очень уж хочется, можно сделать грязный хак:Код: INSERT INTO tableName(col1, col2) Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 26, 2013, 09:08 Да, драйверы Qt для sqlite не поддерживают множественной вставки.
Приблизительное сравнение возможностей драйвера Qt и простого подключения библиотеки в проект. Добавление 13000 хешей файлов: QSqlQuery - 1760896 мс (29 минут) sqlite3 - 146 мс(эээ... ноу минут) PS а я то думал, что это sql такой тормозной :D (http://www.topito.com/wp-content/uploads/2013/01/code-26.gif) Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Пантер от Февраль 26, 2013, 09:19 Bepec, transaction юзал? ;)
Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 26, 2013, 09:25 Конечно. Все добавления шли в транзакции. (в QSqlQuery)
В случае с sqlite транзакции не использовались. (недоработочка) PS это пока первое впечатление, сейчас создам тестовый проектик на оба случая. А то мб действительность отличается :D Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Странник от Февраль 26, 2013, 09:26 советую погуглить на тему медленной вставки SQLITE, узнаете много нового.
Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Февраль 26, 2013, 09:54 Хм. А на чистом проекте показывает практически одинаковые результаты :D
Странно сие. Буду искать проблемку :) PS гуглил уже, включал различные режимы, отрубал журнал. Выигрыш был, но несущественный. Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Пантер от Февраль 26, 2013, 10:08 Мне для ускорения вставки помогло удаление всех индексов перед вставкой и создание их после.
Название: Re: Sql в Qt (конкретно SQLite) Отправлено: fuCtor от Март 03, 2013, 10:39 Да, драйверы Qt для sqlite не поддерживают множественной вставки. Приблизительное сравнение возможностей драйвера Qt и простого подключения библиотеки в проект. Добавление 13000 хешей файлов: QSqlQuery - 1760896 мс (29 минут) sqlite3 - 146 мс(эээ... ноу минут) PS а я то думал, что это sql такой тормозной :D (http://www.topito.com/wp-content/uploads/2013/01/code-26.gif) Какие-то нереальные цифры (если конечно не считаете хэши в реалтайме) о_О у себя перегон записей (14000 шт) из одной БД (Mysql) в Sqlite, пачками по 500шт (обернуто в одну транзакцию) c промежуточной обработкой, занимает 15-20сек. Тут больше затраты на сеть уходят, чем на sqlte. Индексов нет, добавляются потом. Название: Re: Sql в Qt (конкретно SQLite) Отправлено: Bepec от Март 03, 2013, 20:28 Да, у меня там был маленький просчёт в замерах. :)
Но тем больше моя радость, когда был показан приятный результат :) |