|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Завис в С++ на примитивной вещи. Не могу передать массив double rt[N][5] в таблицу SQLite. Запрос простой - const char* INS = " insert into foo values(1, 2, 3, 4, 5 );"; Все работает. Как сформировать строку этого запроса, с элементами массива rt? Или ссылку на инет, где это описано. Все как-то с Питон или С#, а c С++ c БД не приходилось.( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 22:28 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Читать здесь: https://www.sqlite.org/c3ref/stmt.html ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 03:17 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Лучше параметризованный запрос как выше посоветовали. Еще можно сформировать свой инсерт, читай про snprintf() ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 14:17 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Не пойму, чего она от меня хочет? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Коды ощибок Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Err2 25 - (25) SQLITE_RANGE Ошибка SQLITE_RANGE указывает на то, что аргумент номера параметра одной из подпрограмм sqlite3_bind или номер столбца в одной из подпрограмм sqlite3_column находится вне допустимого диапазона. Не понимаю, что она хочет? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 16:19 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Предыдущий вопрос снят. Изменен запрос, исключен begin; В пакете ? не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 17:00 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Вопрос решен. Полностью рабочий код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
printf() вставлены для отладки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 20:29 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Жесть какая. Почему prepare ВНУТРИ цикла? Весь смысл в Prepar ed Statements в том, что их заранее подготовливают. p.s. SQLLite использовал (Java), но C API не пользовался ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 15:53 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, не вижу никакой жести. Не надо драматизировать ситуацию.) Задача стояла разобраться с С-API SQLite и сделать рабочую конструкцию. Далее, совершенству нет предела. Следующим этапом в том числе и запланировано вынесение sqlite3_prepare_v2 и sqlite3_reset за пределы цикла. Пока весь проект делается для оценки быстродействия SQLite через интерфейс C/C++ и возможностей его повышения в разумных пределах. После чего будет рассматриваться вопрос применимости для конкретных целей. PS Интересно, кстати, что в инете большинство пишут данные в таблицы SQLite через char*. Возможно плохо искал, но экземплы с использованием sqlite3_bind_ не попадались. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:05 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
IMHO prepare внутри цикла, полное не понимание для чего же этот самый prepare делается https://www.sqlite.org/c3ref/stmt.html Prepared Statement Object ... 1 Create the prepared statement object using sqlite3_prepare_v2(). 2 Bind values to parameters using the sqlite3_bind_*() interfaces. 3 Run the SQL by calling sqlite3_step() one or more times. 4 Reset the prepared statement using sqlite3_reset() then go back to step 2. Do this zero or more times. 6 Destroy the object using sqlite3_finalize(). ... Пока весь проект делается для оценки быстродействия Тогда жесть вдвойне. Оценивать быстродействие по изначально кривому коду. Вы бы еще ф-цию sleep в "тест для быстродействия" запихали ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:43 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, все, что вы пишите, мне уже известно. И ранее уже сделано. Кстати, вынос prepare за пределы цикла ничего существенного не дал. Что-то в пределах погрешности измерений. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:21 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Фрагмент последней версии кода записи массива в БД с вынесенным за пределы цикла sqlite3_prepare_v2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
В смысле быстродействия, как писалось ранее это ничего не дает, и не могло дать, т.к. основное время выполнения запроса занимают дисковые операции. Уже писал в другой теме, что аналогичная БД в :memory: выполняет этот запрос за 3 мс. Код, приведенный в этом фрагменте и фрагменте выше, за 120-130 мс. На долю sqlite3_prepare_v2 приходится небольшая часть из этих 3 мс, что никак не может влиять на быстродействие программы в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 22:42 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
PS Во всех фрагментах кода инициализация массива double rt[10000][5]; опущена. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 22:45 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
YUBA, подозреваю, что auto-commit mode Вы тоже забыли отключить. Если это так, то нет ничего удивительного, что производительность ниже плинтуса By default, SQLite is in auto-commit mode. It means that for each command, SQLite starts, processes, and commits the transaction automatically. http://www.sqlitetutorial.net/sqlite-transaction/ ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 14:37 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevYUBA, подозреваю, что auto-commit mode Вы тоже забыли отключить. Если это так, то нет ничего удивительного, что производительность ниже плинтуса Его не надо специально отключать. При посылке команды Код: plsql 1.
он автоматически отключается. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:15 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
Тогда у автора результаты замеров скорости какие-то странные. Файловая БД SQLite в памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:43 |
|
Как вставить много строк из двумерного массива
|
|||
---|---|---|---|
#18+
NewBy52Его не надо специально отключать. При посылке команды Код: plsql 1.
он автоматически отключается.Полагаю, вы несколько отстали от жизни, достаточно просто begin;. См. код, кстати. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 19:11 |
|
|
start [/forum/topic.php?fid=54&fpage=2&tid=2008387]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 380ms |
0 / 0 |