http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/pyobjc.ru comments on SQL для самых маленьких2011-01-25T19:15:24ZEvgeniy KrysanovАлексей БлиновValEvgeniy KrysanovValhardwarriorEvgeniy KrysanovvinnyEvgeniy KrysanovAlexanderЯрослав МоталовMerlinamisamisAlexanderДмитрийЧеславValЧеславalexey pakhomovValalexey pakhomovalexey pakhomovalexey pakhomoviMikeАнтон СConstantineсергейdjango-atompubhttp://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c481Comment on SQL для самых маленьких by сергей2011-01-25T19:15:24Z2011-01-25T19:15:24Zсергей<p>Добрый день.
А какую локальную БД ещё можно использовать для МакОС? Все примеры SQLLite направлены именно для айфона, я так посмотрю. А я ищу для большого брата решение…
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c474Comment on SQL для самых маленьких by Constantine2010-12-02T14:46:54Z2010-11-30T23:31:23ZConstantine<p>ребята откуда взялись 2 файла mainViewController.h и mainViewController.m их же не было в “правильном” текстовом редакторе…
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c437Comment on SQL для самых маленьких by Антон С2009-11-13T03:42:12Z2009-11-13T03:42:12ZАнтон С<p>Можно сделать по другому:
</p>
<pre><code>if (record.primaryKey != 0) {
[record updateRecord];
} else {
if ([record insertIntoDatabase:database])
[records addObject:record];
}
</code></pre><p>Только для этого надо будет изменить тип функции insertIntoDatabase: с (void) на (<span class="caps">BOOL</span>) и добавить в функцию корректный return тут:
</p>
<pre><code>if ((self.text == nil) || (text.length == 0))
return FALSE;
</code></pre><p>и добавить в конце функции (<span class="caps">BOOL</span>)insertIntoDatabase: строчку:
</p>
<pre><code>return TRUE;
</code></pre>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c363Comment on SQL для самых маленьких by iMike2009-04-22T12:39:19Z2009-04-22T12:25:11ZiMike<p>В первую очередь хочу выразить автору свою благодарность за этот труд. Особенно очень нравится стиль написания статей. Как для меня, так можно еще меньше давать кода (лучше описать идею метода) в статье да бы дать читателю как можно больше на освоение и самостоятельную реализацию. Хотя я в обще впервые сталкиваюсь с С языком — до этого все время писал на Delphi. Но вот купил себе iPhone и как всегда решил открыть для себя что то новое — но это уже другая история.
</p>
<p>А теперь по статье! Я нашел еще один “бок” в Вашей статье (аппликации). Попробуйте сделать следующие действия (в симуляторе): нажмите “+”, то есть добавить новую запись, и как только он создастся — нашу кнопку “Back”. Все отлично, в нашу базу новая запись не попадет, так как сработает проверка в методе -(void)insertIntoDatabase:(sqlite3 *)db (файл Record.m):
</p>
<pre><code>if((self.txt==nil)||(txt.length==0)) return;
</code></pre><p>Таким образом мы вернемся к списку записей. А теперь попробуйте кликнуть по пустой ячейке в нашей таблице, следующей сразу же за последней непустой. Мы попадем в окно редактирования. Как это получилось? Давайте заглянем в файл txtEditAppDelegate.m в метод -(void)updateOrAddRecordIntoDatabase:(Record *)record:
</p>
<pre><code>if(record.primaryKey!=0){
[record updateRecord];
}else{
[record insertIntoDatabase:database]; //Вставить запись в базу, но там сработает проверка на пустоту
[records addObject:record]; //а вот посылкой этого сообщения мы добавляем пустую запись в наш список
}
</code></pre><p>По этому метод должен выглядеть так:
</p>
<pre><code>if(record.primaryKey!=0){
[record updateRecord];
}else{
if((record.txt==nil)||(record.txt.length==0)) return;
[record insertIntoDatabase:database];
[records addObject:record];
}
</code></pre><p>И теперь подобное не повторится.
Естественно в insertIntoDatabase: проверка на пустоту уже не понадобится, так что от туда ее можно убрать.
</p>
<p>ЗЫ Надеюсь понятливо описал:)
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c357Comment on SQL для самых маленьких by alexey pakhomov2009-04-09T01:56:26Z2009-04-09T01:56:26Zalexey pakhomov<p>все.разобрался сам. спасибо )
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c354Comment on SQL для самых маленьких by alexey pakhomov2009-04-09T01:55:58Z2009-04-08T22:21:03Zalexey pakhomov<p>а мож кто в курсе: бд делаю в excell под mac os.там сохраняю файл как utf 16 txt(так как только тут нормально русский язык оторбражаеться). импорт потом в бд делаю через плагин для firefoxa. все отлично работает вот только utf-16 не устраивает мож кто знает как сохранять в utf-8???
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c353Comment on SQL для самых маленьких by alexey pakhomov2009-04-08T22:12:47Z2009-04-08T22:12:47Zalexey pakhomov<p>а можете поделица ссылкой или личным опытом как заливать в mysql и конвертировать там?
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c352Comment on SQL для самых маленьких by Val2009-04-08T04:27:42Z2009-04-08T04:27:11ZVal<p>я базу заливал в mySQL, там конвертировал в <span class="caps">UTF</span>-8, потом опять заливал в sqlite. У меня правда была в кирилице в mdb база. Но принцип можно использовать. Я так полистал гугл — много жалоб на этот оператор. Может проблема в именах — в коде Objective-C по умолчанию <span class="caps">UTF</span>-8 идёт. Это просто гипотезы.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c351Comment on SQL для самых маленьких by alexey pakhomov2009-04-08T02:10:20Z2009-04-08T02:10:20Zalexey pakhomov<p>А как быть если данные в бд в кодировке <span class="caps">UTF</span>-16. есть функции для работы с <span class="caps">UTF</span>-16. открытие БД проходит без проблем (sqlite3_open16) а вот уже sqlite3_prepare16_v2 не хочет работать. не знаю где баг. помогите разобраться
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c344Comment on SQL для самых маленьких by Val2009-03-15T21:39:00Z2009-03-15T21:38:26ZVal<p>Нужно загрузить сертификат для Вашего iPhone с сайта Apple iPhone Developer Center. Там нужно за 100 долларов зарегистрироваться сначала.
</p>
<p>Там же много примеров кода, в том числе загрузка и парсинг файлов xml.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c343Comment on SQL для самых маленьких by Чеслав2009-03-15T15:11:06Z2009-03-15T15:11:06ZЧеслав<p>А что нужно сделать, что бы запустить отладку на iPhone.
Выдает вот что
Line Location Tool:0: CodeSign error: Code Signing Identity ‘iPhone Developer’ does not match any code-signing certificate in your keychain. Once added to the keychain, touch a file or clean the project to continue.
</p>
<p>Спасибо!
И еще… Не могли бы вы написать пример по получению файлов xml из интернета, с последующим их ччтением
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c309Comment on SQL для самых маленьких by Дмитрий2009-01-09T02:16:08Z2009-01-09T02:13:49ZДмитрий<p>В чем тайный смысл этой конструкции?
</p>
<pre><code>NSMutableArray *recordsArray = [[NSMutableArray alloc] init];
self.records = recordsArray;
[recordsArray release];
</code></pre><p>И этой:
</p>
<pre><code>success = [fileManager....];
if (!success) {
NSAssert1(NO, ....);
</code></pre><p>Не лучше ли:
</p>
<pre><code>records = [[NSMutableArray alloc] init];
</code></pre><p>и
</p>
<pre><code>success = [fileManager....];
NSAssert1(success, ....);
</code></pre>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c308Comment on SQL для самых маленьких by Alexander2009-01-08T06:35:29Z2009-01-08T06:33:35ZAlexander<p>Я нашёл ещё один баг.
Если у меня заметка на весь экран айфона, я её открываю, хочу добавить текст в конце. Нажимаю на последнюю строчку, выезжает клавиатура, а фокус получается далеко не на той строчке, которую я нажимал. Видимо, дело в ресайзинге view. Надо почитать Moving Content That Is Located Under the Keyboard.
Спасибо за статьи. Прям не знаю чё бы я без них делал.
</p>
<p><span class="caps">PS</span>: блин, опять не туда коммент засунул. Пока статью осилишь, мозг уже отдыха просит.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c306Comment on SQL для самых маленьких by amis2009-01-02T11:18:18Z2009-01-02T11:10:54Zamis<p>Кстати спасибо за Ваши статьи
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c305Comment on SQL для самых маленьких by amis2009-01-02T11:10:53Z2009-01-02T11:10:53Zamis<p>По поводу изменения размеров UIView при появлении/сокрытии клавиатуры думаю код не очень удачен. А как будет работать ваша программа если выйдет IPhone nano с несколько другим размером экрана или Apple что-то в клавиатуру добавит например смайлики что изменит её размер. Не очень хорошая мысль задавать координаты явно в коде.
Кстати говоря в документации iPhone Application Programming Guide в разделе Moving Content That Is Located Under the Keyboard, есть куда более правильный метод автоматического перестроения UIView при появлении клавиатуры.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c284Comment on SQL для самых маленьких by Merlin2008-11-23T06:16:45Z2008-11-23T06:16:45ZMerlin<p>Сам начал искать редактор после прочтения статьи.
Вот нашел замечательный и главное бесплатны.
Правда реализован он в виде плагина для Firefox =)
</p>
<p>https://addons.mozilla.org/en-<span class="caps">US</span>/firefox/addon/5817
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c276Comment on SQL для самых маленьких by Ярослав Моталов2008-11-05T20:05:17Z2008-11-05T20:05:17ZЯрослав Моталов<p>Дело в том что iPhone использует так называемую песочницу, корневой каталог для каждой программы это ее домашний каталог (программы) больше никаких данных и путей программа видеть не может и небудет :) поэтому создавать таблицу надо или в самой программе или подключать. Доступ к данным другим осуществляется через фреймворки и то не все, например музыка, картинки да и то для каждого вида файлов отведен определенный размер.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c275Comment on SQL для самых маленьких by Alexander2008-11-04T17:57:39Z2008-11-04T17:57:39ZAlexander<p>Есть проблема с файлом базы.
</p>
<p>Файл базы уже подключен к проекту.
</p>
<ol>
<li>
sqlite3 mydatabase.db
</li>
<li>
создаем таблицу.
</li>
<li>
закрываем.
</li>
<li>
запускаем приложение где пробуем сделать select из этой базы.
</li>
<li>
получаем ошибку о том что такой таблицы нет.
</li>
<li>
копируем файл базы в папку /Users/…./Library/Application Support/iPhone Simulator/User/Applications/…../
</li>
<li>
запускаем снова приложение.
</li>
<li>
все работает.
</li>
</ol>
<p>чем это можно объяснить и как это можно исправить?
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c274Comment on SQL для самых маленьких by Evgeniy Krysanov2008-11-01T13:58:30Z2008-11-01T13:58:30ZEvgeniy Krysanov<p>Эта строчка есть, в applicationWillTerminate. База не закрывает до окончания работы программы.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c273Comment on SQL для самых маленьких by vinny2008-11-01T11:12:44Z2008-11-01T11:12:44Zvinny<p>Респект за статью<br />
В функции -(void)initializeDatabase (а может еще в каких-нибудь) в самом конце не хватает строчки sqlite3_close(database); или мне что-то мощно не по глазам :)))
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c272Comment on SQL для самых маленьких by Evgeniy Krysanov2008-10-31T14:27:20Z2008-10-31T14:24:30ZEvgeniy Krysanov<p>Спасибо.
</p>
<ol>
<li>
При отладке приложения на iPhone можно скачать содержимое папки Documents на компьютер через XCode. При работе в эмуляторе такие папки тоже создаются, но я не могу сейчас сказать где они лежат — под рукой нет мака.<br />
</li>
<li>
Консольный редактор есть. Визуального в XCode нет, но есть сторонние приложения:<br />
http://mac.softpedia.com/get/Developer-Tools/SQLite-Database-Browser.shtml<br />
http://sqlabs.net/sqlitemanager.php
</li>
</ol>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c271Comment on SQL для самых маленьких by hardwarrior2008-10-30T21:55:44Z2008-10-30T21:55:44Zhardwarrior<p>Отличная статья!
Но есть 2 вопроса:
1) Можно ли как то получить доступ к базе в документсах на эмуляторе?
2) Есть ли в xcode визуальный браузер для SQLite баз. Хотя бы только на чтение, хотя бы не для всякого файлика-базы, а с эмулятора или девайса, на котором отлаживается)))
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c225Comment on SQL для самых маленьких by Val2008-09-22T14:00:33Z2008-09-22T14:00:33ZVal<p>Мерси. Бережёного Бог бережёт.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c224Comment on SQL для самых маленьких by Evgeniy Krysanov2008-09-22T13:58:31Z2008-09-22T13:58:31ZEvgeniy Krysanov<p>Если программа работает с нежелательными для разглашения данными, то лучше, конечно же, шифровать их перед помещением в базу.
</p>
<p>Папка Documents не является той папкой, которая доступна всем программам как в Windows. Эта папка создается индивидуально для каждого приложения и запись и чтение из нее ограничено приложением, которому она принадлежит (в прошлом или позапрошлом посте я описывал состав папок).
</p>
<p>Так что пользуясь легальным iPhone, доступ к этой базе извне получить не выйдет (ага, смешная фраза, учитывая недавние инструкции в сети как по Wi-Fi можно законнектиться к любому iPhone/iPod Touch и зайти под root). Но “человек сделал, человек и сломать сможет” и лучше перестраховаться.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c223Comment on SQL для самых маленьких by Val2008-09-22T13:44:54Z2008-09-22T13:41:58ZVal<p>Очень хороший пример. Спасибо.
Хотелось бы обсудить другой вариант. Если база сама по себе — коммерческий продукт (нет аналогов). Поэтом её требуется как-то закрыть. Если поместить в папку “Документс”, то любой вытащит данные.
Под виндоус я делал стандартную базу mdb, но шифровал данные внутри базы каким-то-там-многобитным алгоритмом. Успешно.
А для мака такой же способ? Или можно как-то попроще? Если базу включить в папку проекта с “только чтением”, вероятно её смогут всё же вытащить и декомпилировать?
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c195Comment on SQL для самых маленьких by Evgeniy Krysanov2008-09-04T15:35:12Z2008-09-04T15:35:12ZEvgeniy Krysanov<blockquote><p>два разных класса содержали переменные, ссылающиеся на один и тот же NSArray
</p>
</blockquote><p>Не спорю, все зависит от ситуации.
</p>
<blockquote><p>Еще в паре мест в коде у тебя вместо дефиса стоит mdash
</p>
</blockquote><p>А это уже претензия к движку :) Хотя это не его “минус”, а скорее “плюс”. Он очень хорошо обрабатывает текст, чтобы тот выглядел валидным в браузере. Если не считать ссылок “Добавить пост в” в конце статьи, то весь блог полностью <span class="caps">XHTML</span> валидный.
</p>http://pyobjc.ru/2008/08/23/sql-dlya-samyh-malenkih/#c193Comment on SQL для самых маленьких by Алексей Блинов2008-09-04T13:40:41Z2008-09-04T13:40:41ZАлексей Блинов<p>Как всегда отличный урок. Спасибо.
</p>
<p>Насчет операции в get-методе. То, что ты прочел в общем и целом верно, но бывают и исключения. Что, если мне, к примеру, нужно, чтобы два разных класса содержали переменные, ссылающиеся на один и тот же NSArray, содержимое которого будет меняться в процессе, и обоим классам нужно эти изменения отслеживать? Тогда копирование точно не подойдет — нужен retain. Бывают также случаи, когда копирование – довольно дорогостоящая операция.
</p>
<p>Еще в паре мест в коде у тебя вместо дефиса стоит mdash. XCode их отображает одинаково, поэтому я долго думал, почему скопированный код выдает мне ошибку Unknown token. :)
</p>