sqlite - insert Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
sergiokey
Knows some wx things
Knows some wx things
Posts: 30
Joined: Sat Mar 21, 2009 6:55 am

sqlite - insert

Post by sergiokey »

здравствуйте. у меня такой вопрос:
я работаю с wxARG с SQLite, все замечательно, вещь очень полезная, но при занесении информации в БД из каталога (~200 файлов, от 10 до 100 записей в каждом) у меня отрабатывается очень медленно (часа полтора), хотя без вставок отрабатывается меньше минуты). Делаю как в примерах: New, заполнение, Save для каждой записи. Но наверняка ведь можно как-то соптимизировать. А как это сделать? и насколько это будет быстрее?

Заранее спасибо
Visual Studio 2008 Express
wxWidgets 2.8.10
Windows XP sp2
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex »

Сделай через тарзакции. Перед началом - начало транзакции (есть метод в DatabaseLayer), в конце - коммит. При ошибке - роллбек.
А вобще сейв там надо делать ну допустим каждые 100 записей было б нормально.
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

~200 файлов c SQLite? :shock: это как? в документах к SQLite пишут мол только один файл.....
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
sergiokey
Knows some wx things
Knows some wx things
Posts: 30
Joined: Sat Mar 21, 2009 6:55 am

Post by sergiokey »

~200 файлов c SQLite? это как? в документах к SQLite пишут мол только один файл.....
)))) нет, это грабятся в базу 200 файлов, sqlite файл - один)
Сделай через тарзакции. Перед началом - начало транзакции (есть метод в DatabaseLayer), в конце - коммит. При ошибке - роллбек.
А вобще сейв там надо делать ну допустим каждые 100 записей было б нормально.
вот в этом и вопрос. в сгенерированных ARG файлах есть только Table::New, Row::Save, RowSet::SaveAll,
и если создавать запись-сохранять запись логично, то мне кажется создавать таблицей, сохранять rowset'ом(который не знает о созданных записях) - это не логично.

каким образом создавать-сохранять несколько записей?
Visual Studio 2008 Express
wxWidgets 2.8.10
Windows XP sp2
sergiokey
Knows some wx things
Knows some wx things
Posts: 30
Joined: Sat Mar 21, 2009 6:55 am

Post by sergiokey »

и еще: можно ли в sqlite дописывать какие то свои переменные(значения), или нужно создавать таблицу?
Visual Studio 2008 Express
wxWidgets 2.8.10
Windows XP sp2
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

sergiokey wrote: )))) нет, это грабятся в базу 200 файлов, sqlite файл - один)
Напужал однако )) я уж думал, что я что-то новое упустил в SQLite....

sergiokey wrote: и еще: можно ли в sqlite дописывать какие то свои переменные(значения), или нужно создавать таблицу?
Имеется в виду добавить новый столбец в таблицу? если так, то можно, но это уже дело не SQLite а чисто SQL, если я не ошибаюсь в SQL есть оператор ALTER TABLE он вроде как добавляет новый столбец, типа: ALTER TABLE moya_tablitsa ADD noviy_stolbets CHAR(100);
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
sergiokey
Knows some wx things
Knows some wx things
Posts: 30
Joined: Sat Mar 21, 2009 6:55 am

Post by sergiokey »

нет, имеется в виду, например записать дату обновления, а заводить под это дело целую!!! таблицу не хочется
Visual Studio 2008 Express
wxWidgets 2.8.10
Windows XP sp2
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

sergiokey wrote:нет, имеется в виду, например записать дату обновления, а заводить под это дело целую!!! таблицу не хочется
Ежель в таблице, есть специальный столбец внесения даты обновления с типом данных "дата" то отчего же нельзя?? есть INSERT вот им и нужно вставлять...
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
sergiokey
Knows some wx things
Knows some wx things
Posts: 30
Joined: Sat Mar 21, 2009 6:55 am

Post by sergiokey »

нет, я имею в виду, что нужно сделать пометку в базе данных - например дату обновления, одну на всю базу, а таблицу под одну запись выделять не хочется - жаба душит :lol:

а насчет первоначального вопроса не знаешь?
Visual Studio 2008 Express
wxWidgets 2.8.10
Windows XP sp2
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

sergiokey wrote:нет, я имею в виду, что нужно сделать пометку в базе данных - например дату обновления, одну на всю базу, а таблицу под одну запись выделять не хочется - жаба душит :lol:
Боюсь, что нельзя, только создать таблицу и больше никак.
sergiokey wrote: а насчет первоначального вопроса не знаешь?
Ти-Рекс ответил совершенно верно, через транзакции... если чисто через SQLite то в начале "припер" в середине "степ" в конце "коммит", в wxSQLite в начале "Begin" в конце "Commit" в ДатаБейсЛейере не знаю... но догадываюсь, что в начале должен быть "Бегин" а в конце "Коммит".
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
Nikolay
Experienced Solver
Experienced Solver
Posts: 72
Joined: Wed Oct 10, 2007 4:27 am

Post by Nikolay »

Насколько я помню в SQLite есть одно поле на всю базу данных где можно хранить свое произвольное значение, стоит посмотрить документацию к ориганальному API SQLite.
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets
Post Reply