|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
Был бы благодарен за помощь. Собственно не могу правильно организовать условие, в котором если запись в таблице существует, то вернуть rowid этой записи, если же не существует то добавить эту запись в таблицу и вернуть её rowid. Пишу на C#. Версия фреймворка 4.0. Блок if возвращает rowid верный, но вот else выдает постоянно rowid равный 1. Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 23:24 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
heliogracie, может потому, что для else выполняется точно такой же запрос, который используется для проверки select count -- хотя должен был бы вызываться просто select rowid. Не? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 23:45 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
heliogracieБлок if возвращает rowid верныйНеправда. select count(rowid) выдаст тебе количество строк в таблице, а не номер последней записи. А вообще, для подобных задач есть универсальное решение: Если word это PK, то вставить новую запись если такой еще нет: insert into wordlist (word) select 'milk' where not exists (select * from wordlist where word='milk'); Ну а потом если очень надо - прочитать rowid: select rowid from wordlist where word='milk'; Но я очень-очень-очень не советую работать с rowid. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2013, 23:51 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
White OwlheliogracieБлок if возвращает rowid верныйНеправда. select count(rowid) выдаст тебе количество строк в таблице, а не номер последней записи. А вообще, для подобных задач есть универсальное решение: Если word это PK, то вставить новую запись если такой еще нет: insert into wordlist (word) select 'milk' where not exists (select * from wordlist where word='milk'); Ну а потом если очень надо - прочитать rowid: select rowid from wordlist where word='milk'; Но я очень-очень-очень не советую работать с rowid. Большое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 00:24 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
Поделись, почему "очень-очень-очень", а не просто "не советую" ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 07:57 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
Иван СерёгинПоделись, почему "очень-очень-очень", а не просто "не советую"Потому что rowid удобен и люди (не обязательно новички) могут с легкостью наваять систему работающую на основе rowid. И будет она замечательно жить, до тех пор пока не придет vacuum или перестройка базы. И вот тут-то пушной зверек и проявится.... Ошибок ты никаких не увидишь, но целостность данных станет воспоминанием. rowid это физическая вещь, это не настоящий ключ и даже не суррогатный ключ, это внутренняя вещь которая по хорошему не должна быть видима вообще. Hipp очень сглупил сделав его доступным публике. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 18:06 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
White OwlИван СерёгинПоделись, почему "очень-очень-очень", а не просто "не советую"Потому что rowid удобен и люди (не обязательно новички) могут с легкостью наваять систему работающую на основе rowid. И будет она замечательно жить, до тех пор пока не придет vacuum или перестройка базы. И вот тут-то пушной зверек и проявится.... Ошибок ты никаких не увидишь, но целостность данных станет воспоминанием. rowid это физическая вещь, это не настоящий ключ и даже не суррогатный ключ, это внутренняя вещь которая по хорошему не должна быть видима вообще. Hipp очень сглупил сделав его доступным публике. В документации на SQLite пишут, что primary key таблицы, будь он целым числом, автоматом маппится на внутренний rowid и фактически становится его алиасом при работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 18:26 |
|
Получить rowid последней добавленной записи в таблицу
|
|||
---|---|---|---|
#18+
JaDiВ документации на SQLite пишут, что primary key таблицы, будь он целым числом, автоматом маппится на внутренний rowid и фактически становится его алиасом при работе.Но в этом случае у тебя будет нормальное поле для работы. На него можно будет ссылаться из внешних ключей и его значение будет сохраняться при vacuum. То что оно совпадает с rowid это внутренние дела СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2013, 19:29 |
|
|
start [/forum/topic.php?fid=54&msg=38204823&tid=2008919]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 160ms |
0 / 0 |