Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > SQLite


Автор: Vaulter 9.4.2004, 13:58
ктонибудь использовал? есть пара вопросов...

Автор: sergejzr 9.4.2004, 14:05
Задавай пожалста

Автор: Vaulter 12.4.2004, 12:10
sergej.z
почему нельзя (или можно, но у меня не выходит) делать INSERT через sqlite_compile, sqlite_finalize.
есть ли классы для C++ для удобства?

Автор: Mal Hack 12.4.2004, 19:38
Вот чтобы SQLLite работал на C я не слышал.. Слышал, что работает такая вещб на ПХП.
Кое-что можешь почитать тут: http://detail.phpclub.net/article/sqlight

Автор: Vaulter 13.4.2004, 12:14
Mal Hack
прекрасно работает, причем как dll и можно скомпилировать вместе с проектом.

sergej.z
и еще вопрос: ужастно нехватает подобие mysql_num_rows()... возвращает кол-во строк в SELECT запросе.

Автор: sergejzr 13.4.2004, 15:34
Цитата
почему нельзя (или можно, но у меня не выходит) делать INSERT через sqlite_compile, sqlite_finalize.
есть ли классы для C++ для удобства?

Должно работать. sqlite_step после sqlite_compile делаешь?
Цитата
не хватает подобие mysql_num_rows()...

На insert, update, delete количество изменённых строк опрашивается sqlite_changes(sqlite*) (причём опрашивается после sqlite_step).
А на SELECT действительно нет, потому что оно было бы известно только после последнего степа, а тогда уже все строки всё равно будут зачитаны.
  • Как алтернатива SELECT count(*) where.... (можно в Си функцию убрать).
  • Можно так же извратиться через sqlite_create_aggregate которая бы сажала глобальную переменную (если очень надо, можно набросать кое чего, но думаю этот вариант не лучше SELECT count(*)).
  • В своё время я написал маленький парсер, который создаёт второй запрос, в котором колонки в селекте заменяются на count(*). Но надо ли это тебе делать при каждом запросе?
Вообще SQLite поставляет только базовые функции БД, а навороты можно сделать самому.
Например в SQLite нет оптимизатора выражений, что даёт преимущество Oracle при комплексных statement'ax в плане быстродействия. Например при Join'ax.

Надеюсь смог помочь...
Удачи!
Сергей






Добавлено @ 15:44
Цитата
есть ли классы для C++ для удобства?

Классов Си ++ сколько угодно! Так же сам делал. но там задача была обэденить различные БД на различных платформах, так что тебе навряд ли подойдёт. Вот линк http://www.codeproject.com/database/CppSQLite.asp?df=100&forumid=34722&exp=0&select=780819. Не знаю, насколько это удобно...
Ещё есть http://groups.yahoo.com/group/sqlrelay но помоему они там вообще намудрили (я сам не разбирался).

IMHO Лучший способ - написать самому, как тебе удобно :-)



Автор: Vaulter 13.4.2004, 17:00
sergej.z
>>Должно работать. sqlite_step после sqlite_compile делаешь?
нет, а нужно ли?
>>Надеюсь смог помочь...
да, информация это лучше чем ее отсутствие ;)

>>IMHO Лучший способ - написать самому, как тебе удобно :-)
дык..вот сижу и ваяю... )))

Автор: sergejzr 13.4.2004, 17:05
после sqlite_compile создаётся виртуальная машина для отработки запроса (и больше ничего не происходит).
Только со степом эта машина выполнит запрос.
Это можно использовать. Например понагенерить таких машин, а потом в любом порядке выполнять запросы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)