Page 1 of 1

sqlite - insert

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

Заранее спасибо

Posted: Tue Aug 11, 2009 10:49 am
by T-Rex
Сделай через тарзакции. Перед началом - начало транзакции (есть метод в DatabaseLayer), в конце - коммит. При ошибке - роллбек.
А вобще сейв там надо делать ну допустим каждые 100 записей было б нормально.

Posted: Tue Aug 11, 2009 11:04 am
by Mojo
~200 файлов c SQLite? :shock: это как? в документах к SQLite пишут мол только один файл.....

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

каким образом создавать-сохранять несколько записей?

Posted: Tue Aug 11, 2009 11:59 am
by sergiokey
и еще: можно ли в sqlite дописывать какие то свои переменные(значения), или нужно создавать таблицу?

Posted: Tue Aug 11, 2009 3:01 pm
by Mojo
sergiokey wrote: )))) нет, это грабятся в базу 200 файлов, sqlite файл - один)
Напужал однако )) я уж думал, что я что-то новое упустил в SQLite....

sergiokey wrote: и еще: можно ли в sqlite дописывать какие то свои переменные(значения), или нужно создавать таблицу?
Имеется в виду добавить новый столбец в таблицу? если так, то можно, но это уже дело не SQLite а чисто SQL, если я не ошибаюсь в SQL есть оператор ALTER TABLE он вроде как добавляет новый столбец, типа: ALTER TABLE moya_tablitsa ADD noviy_stolbets CHAR(100);

Posted: Tue Aug 11, 2009 6:48 pm
by sergiokey
нет, имеется в виду, например записать дату обновления, а заводить под это дело целую!!! таблицу не хочется

Posted: Tue Aug 11, 2009 7:17 pm
by Mojo
sergiokey wrote:нет, имеется в виду, например записать дату обновления, а заводить под это дело целую!!! таблицу не хочется
Ежель в таблице, есть специальный столбец внесения даты обновления с типом данных "дата" то отчего же нельзя?? есть INSERT вот им и нужно вставлять...

Posted: Wed Aug 12, 2009 3:31 am
by sergiokey
нет, я имею в виду, что нужно сделать пометку в базе данных - например дату обновления, одну на всю базу, а таблицу под одну запись выделять не хочется - жаба душит :lol:

а насчет первоначального вопроса не знаешь?

Posted: Wed Aug 12, 2009 7:37 am
by Mojo
sergiokey wrote:нет, я имею в виду, что нужно сделать пометку в базе данных - например дату обновления, одну на всю базу, а таблицу под одну запись выделять не хочется - жаба душит :lol:
Боюсь, что нельзя, только создать таблицу и больше никак.
sergiokey wrote: а насчет первоначального вопроса не знаешь?
Ти-Рекс ответил совершенно верно, через транзакции... если чисто через SQLite то в начале "припер" в середине "степ" в конце "коммит", в wxSQLite в начале "Begin" в конце "Commit" в ДатаБейсЛейере не знаю... но догадываюсь, что в начале должен быть "Бегин" а в конце "Коммит".

Posted: Fri Aug 14, 2009 8:26 am
by Nikolay
Насколько я помню в SQLite есть одно поле на всю базу данных где можно хранить свое произвольное значение, стоит посмотрить документацию к ориганальному API SQLite.