Перейти к содержимому


Очистка базы SQLite


Сообщений в теме: 25

#1 Sergey_Logachev

    Специалист

  • Специалисты
  • PipPipPipPip
  • 288 сообщений
  • ГородЛипецкая обл. г.Елец

Отправлено 16 Ноябрь 2011 - 21:23

Доброго времени суток форумчане
Подскажите мне каким запросом очистить базу SQLite
У меня сделано так -
"DELETE FROM table_name"
Выдает ошибку (по русски говоря типо синтаксическая ошибка)
Как быть, что с этим делать, на вас надежда одна
За ранее спасибо :)

#2 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 16 Ноябрь 2011 - 23:02

В самом запросе ошибки нет.. если не очищается, значит что то не так с файлом базы.
Как вариант есть хорошая програмка SQLite Developer называется.(не реклама)
Создание, очистка, sql запросы, экспорт и т.д.
подключаешся к файлу базы, выбираеш таблицу, в окне выбираеш Data, жмеш по значку Empty Table

А вообще лучше хранить каждую таблицу в отдельном файле отдельной базы..меньше заморочек.

Сообщение отредактировал ~ёМАё~: 16 Ноябрь 2011 - 23:06


#3 Sergey_Logachev

    Специалист

  • Специалисты
  • PipPipPipPip
  • 288 сообщений
  • ГородЛипецкая обл. г.Елец

Отправлено 16 Ноябрь 2011 - 23:19

Просмотр сообщения~ёМАё~ (16 Ноябрь 2011 - 23:02) писал:

В самом запросе ошибки нет.. если не очищается, значит что то не так с файлом базы.
Как вариант есть хорошая програмка SQLite Developer называется.(не реклама)
Создание, очистка, sql запросы, экспорт и т.д.
подключаешся к файлу базы, выбираеш таблицу, в окне выбираеш Data, жмеш по значку Empty Table

А вообще лучше хранить каждую таблицу в отдельном файле отдельной базы..меньше заморочек.
У меня и так каждая таблица в отдельном файле :???:
Только один х.. не чистит

#4 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 16 Ноябрь 2011 - 23:32

непонятно почему не чистит, но даже если так, то в чём проблема..
если в отдельном файле, удали этот файл и пересоздай заново.

#5 Sergey_Logachev

    Специалист

  • Специалисты
  • PipPipPipPip
  • 288 сообщений
  • ГородЛипецкая обл. г.Елец

Отправлено 16 Ноябрь 2011 - 23:35

Просмотр сообщения~ёМАё~ (16 Ноябрь 2011 - 23:32) писал:

непонятно почему не чистит, но даже если так, то в чём проблема..
если в отдельном файле, удали этот файл и пересоздай заново.
Да ты прав так будет даже легче.
И это ведь можно сделать автоматизированно?

#6 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 16 Ноябрь 2011 - 23:45

Можно.
Если нужно на лету(при работающем боте) удалять базу,
то сначала надо отключиться от нее, удалить, затем пересоздать файл базы, затем сделать подключение заново..
весь процесс займёт пару секунд, может и меньше.

#7 Sergey_Logachev

    Специалист

  • Специалисты
  • PipPipPipPip
  • 288 сообщений
  • ГородЛипецкая обл. г.Елец

Отправлено 16 Ноябрь 2011 - 23:50

Просмотр сообщения~ёМАё~ (16 Ноябрь 2011 - 23:45) писал:

Можно.
Если нужно на лету(при работающем боте) удалять базу,
то сначала надо отключиться от нее, удалить, затем пересоздать файл базы, затем сделать подключение заново..
весь процесс займёт пару секунд, может и меньше.
Сделал так
Скрытый текст
Что-то типо этого прокатит *??

Сообщение отредактировал StaTi©: 17 Ноябрь 2011 - 00:13


#8 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 17 Ноябрь 2011 - 00:00

Просмотр сообщенияStaTi© (16 Ноябрь 2011 - 23:50) писал:

Сделал так
Скрытый текст
да, только нужно ещё добавить отключение от базы перед удалением..иначе при текущем подключении файл может не удалиться.

Сообщение отредактировал ~ёМАё~: 17 Ноябрь 2011 - 00:02


#9 Sergey_Logachev

    Специалист

  • Специалисты
  • PipPipPipPip
  • 288 сообщений
  • ГородЛипецкая обл. г.Елец

Отправлено 17 Ноябрь 2011 - 00:08

Просмотр сообщения~ёМАё~ (17 Ноябрь 2011 - 00:00) писал:

да, только нужно ещё добавить отключение от базы перед удалением..иначе при текущем подключении файл может не удалиться.
:mellow: я чутка обновил но кажется я не так сделал :( я получается закрываю полностью подкл., и потом откр. не понятно какие таблицы для сервиса: n


DBChat db = new DBChat(n);

Сообщение отредактировал StaTi©: 17 Ноябрь 2011 - 00:14


#10 scano

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 571 сообщений
  • ГородМосква

Отправлено 17 Ноябрь 2011 - 02:07

Просмотр сообщенияStaTi© (16 Ноябрь 2011 - 21:23) писал:

Доброго времени суток форумчане
Подскажите мне каким запросом очистить базу SQLite
У меня сделано так -
"DELETE FROM table_name"
Выдает ошибку (по русски говоря типо синтаксическая ошибка)
Как быть, что с этим делать, на вас надежда одна
За ранее спасибо :)
Я с SQLite близко не знаком к сожалению, но успел "обложку прочитать" и полагаю, что таким запросом ты пытаешь удалить элементы в БД, а не производить её очистку, что вполне вероятно SQLite ссылается именно к неполноте запроса.
Следовательно, ты используешь неверный запрос.
Попробуй выполнить запрос "truncate `table`" (взят из MySQL)
Либо попробуй запрос с ключевым словом "clear" (напр.: clear `table`) или что то подобное.
Конечно же хотелось видеть сам текст ошибки, на что он ссылается, что поясняет нам, а так, тебя лишь тестирование спасёт или доки по SQLite

Просмотр сообщенияStaTi© (16 Ноябрь 2011 - 23:50) писал:

Сделал так
Скрытый текст
Что-то типо этого прокатит *??
Крапотливая работа, зачем организовывать пересоздание БД заместо очистки, в любой СУБД должен присутствовать операция очистки баз

#11 nek

    Профи

  • Модераторы
  • 2 293 сообщений

Отправлено 17 Ноябрь 2011 - 04:15

Что за херню вы тут городите?
DELETE FROM table WHERE 1;
Все. Таблица пуста.
TRUNCATE удаляет таблицу, а не очищает.

#12 Пушкожук

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 617 сообщений
  • ГородМосква

Отправлено 17 Ноябрь 2011 - 07:14

Просмотр сообщенияnek (17 Ноябрь 2011 - 04:15) писал:

TRUNCATE удаляет таблицу, а не очищает.
А что тогда делает DROP?
По теме - DELETE FROM table_name должно работать. Какую ошибку выдаёт? Может, БД повреждена?

#13 scano

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 571 сообщений
  • ГородМосква

Отправлено 17 Ноябрь 2011 - 10:35

Просмотр сообщенияnek (17 Ноябрь 2011 - 04:15) писал:

Что за херню вы тут городите?
DELETE FROM table WHERE 1;
Все. Таблица пуста.
TRUNCATE удаляет таблицу, а не очищает.
Не знаю как SQLite, но в MySQL запрос truncate `table` как раз и выполняет очистку заданной таблицы.
А запрос drop table `table` полностью удаляет её.

А то что вы пытаетесь сделать с запросом delete from `table` переводится как "удалить из таблицы `таблица`", а что удалить? в запросе не указано.
Если даже при помощи этого запроса и можно как то очистить БД, то я полагаю он может принимать выражение delete from `table` all elements
чем обсужать и гадать, советую заглянуть в http://sqlite.org/docs.html и по ним следовать и искать нужный материал.

PS. сори, дважды прочитав пост понял что проблема уже решена. Ложное условие подставил, логично, только мне кажется что это не является официальным запросом по очистке БД, такой запрос и в MySQL работает

Сообщение отредактировал scano: 17 Ноябрь 2011 - 10:45


#14 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 17 Ноябрь 2011 - 10:49

TRUNCATE вообще не используется в SQLite
как альтернатива
DELETE FROM "название_таблицы" прекрасно очищает таблицу.
плюс можно еще добавить VACUUM для сжатия базы (удаление пустых мест), но это пожеланию.
не спорьте просто проверьте сами и всё

Сообщение отредактировал ~ёМАё~: 17 Ноябрь 2011 - 10:52


#15 host

    Пользователь

  • Пользователи
  • PipPip
  • 75 сообщений
  • ГородЕкатеринбург

Отправлено 17 Ноябрь 2011 - 12:58

Изображение

#16 Пушкожук

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 617 сообщений
  • ГородМосква

Отправлено 17 Ноябрь 2011 - 19:40

Английский знаешь?
no such table: log
нет такой таблицы: log

#17 host

    Пользователь

  • Пользователи
  • PipPip
  • 75 сообщений
  • ГородЕкатеринбург

Отправлено 17 Ноябрь 2011 - 19:43

Суть в том и была что таблица всё есть, но как включалась автоочистка шла такая ошибка.
Попросили же выложить.

#18 ~ёМАё~

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 817 сообщений
  • ГородТамбовская обл.

Отправлено 17 Ноябрь 2011 - 19:50

Просмотр сообщенияhost (17 Ноябрь 2011 - 19:43) писал:

Суть в том и была что таблица всё есть, но как включалась автоочистка шла такая ошибка.
прерывайте подключение к базе в момент её пересоздания, писал уже об этом несколько раз

#19 scano

    Профи

  • Пользователи
  • PipPipPipPipPip
  • 571 сообщений
  • ГородМосква

Отправлено 18 Ноябрь 2011 - 01:55

Забыл сказать для сводки что предлагаемый запрос
delete from `table` where 1
не катит для таблиц в которых имеется индекс (primary key(`...`)), он лишь удаляет элементы, а не полностью очищает всю информацию в таблице.
Если такой же касяк как в MySQL есть и в SQLite, то использовать данный запрос для таблиц с индексами как видите нельзя.
Остаётся лишь искать запрос полной очистки тут, либо пересоздание базы, но в таком случае бот должен быть offline, а иначе в ту долю времени когда бот будет отключён от "x" таблицы может проникнуть другой код с обращением в эту же "x" таблицу, а потом хлыс и консоль залита кровью error'ов.

и еще, Добро пожаловать в сообщество SQLite Forum

Сообщение отредактировал scano: 18 Ноябрь 2011 - 02:00


#20 Пушкожук

    Профи

  • Специалисты
  • PipPipPipPipPip
  • 617 сообщений
  • ГородМосква

Отправлено 18 Ноябрь 2011 - 10:08

Просмотр сообщенияscano (18 Ноябрь 2011 - 01:55) писал:

Остаётся лишь искать запрос полной очистки тут
http://sqlite.org/lang_delete.html

Цитата

If the WHERE clause is not present, all records in the table are deleted.

Цитата

When the WHERE is omitted from a DELETE statement and the table being deleted has no triggers, SQLite uses an optimization to erase the entire table content without having to visit each row of the table individually. This "truncate" optimization makes the delete run much faster.

Сообщение отредактировал Пушкожук: 18 Ноябрь 2011 - 10:10






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей