Извлечение базы данных SQLite в текстовые поля из определенной строки

Я пытаюсь подключиться к базе данных SQLite и у меня есть метод, который указывает конкретную строку из базы данных (первый столбец в базе данных - это «ID» и является первичным ключом), а затем извлекаю информацию из нескольких других столбцов в этой строке. и отображать их в текстовых полях.

Это будет использоваться для простой игры Trivia, которую я делаю; Позже я сделаю случайный метод, который будет выбирать строку случайным образом.

Я боролся с этой проблемой в течение нескольких недель, и я прошел через множество руководств, но все они связаны с отображением данных в виде таблицы, я хочу отображать его просто в текстовых полях в приложении на основе просмотра. Я довольно сбит с толку на этом этапе, поэтому любая помощь, начиная с загрузки базы данных и заканчивая отображением данных в текстовых полях, будет ОЧЕНЬ ПРИЗНАЧЕНА!

Спасибо!


person Greg    schedule 05.04.2011    source источник
comment
На каком языке вы пишете приложение? Когда вы говорите текстовое поле, вы имеете в виду TextBox в приложении Winforms?   -  person Martin    schedule 05.04.2011
comment
Привет, Мартин, приношу свои извинения, я пишу приложение на xCode для iPhone OS.   -  person Greg    schedule 05.04.2011


Ответы (1)


Ссылка на libsqlite3.dylib (и импорт <sqlite3.h>), чтобы получить доступ к мощи SQLite. Существует несколько облегченных интерфейсов Objective-C, и я предлагаю вам выбрать один. В этом примере я использую fmdb (https://github.com/ccgus/fmdb) для чтения имен людей из ранее созданной базы данных:

NSString* docsdir = [NSSearchPathForDirectoriesInDomains( 
    NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString* dbpath = [docsdir stringByAppendingPathComponent:@"people.db"];
FMDatabase* db = [FMDatabase databaseWithPath:dbpath];
if (![db open]) {
    NSLog(@"Ooops");
    return;
}
FMResultSet *rs = [db executeQuery:@"select * from people"];
while ([rs next]) {
    NSLog(@"%@ %@", 
        [rs stringForColumn:@"firstname"], 
        [rs stringForColumn:@"lastname"]);
}
[db close];
/* output:
Snidely Whiplash
Dudley Doright
*/

Это иллюстрирует обращение к базе данных; знание SQL зависит от вас (и это отдельная тема). Вы можете включить ранее созданный файл SQLite в свой пакет приложений, но вы не можете писать в него там; решение состоит в том, чтобы скопировать его из пакета приложений в другое место, например в каталог «Документы», прежде чем вы начнете с ним работать.

Наконец, чтобы поместить строки в текстовые поля (UITextField), установите их свойство text. Так, например, вместо цикла while, показанного выше, где я регистрирую результаты базы данных, я мог бы использовать эти результаты для установки значений текстовых полей:

myTextField.text = [rs stringForColumn:@"firstname"];
myOtherTextField.text = [rs stringForColumn:@"lastname"];
person matt    schedule 05.04.2011
comment
Спасибо за ответ, Мэтт! Я пробовал то, что вы предлагали, но мне неясно две вещи: 1. Ссылка, которую вы указали для fmdb, просто ведет на страницу, где вы можете скачать проект? Должен ли fmdb быть фреймворком? 2. В вашем примере вы использовали people.db, глядя на структуру кода, похоже, что вы используете / сохраняете базу данных, которая находится в папке документов, связанной с приложением. Мне нужно создать уже существующую базу данных SQL, доступную только для чтения, которую я сохраню в папке ресурсов моего проекта. Поправьте меня, если меня здесь носят? Спасибо еще раз! - person Greg; 06.04.2011
comment
fmdb - это всего лишь несколько классов, перетащите их прямо в свой проект и используйте. - Файл базы данных может быть где угодно; как я уже сказал, мое приложение началось с копирования базы данных из пакета приложений в каталог Documents перед его открытием, на всякий случай, если я захочу написать в него. - person matt; 06.04.2011
comment
Привет, Мэтт, я добавил классы в свой проект и импортировал файлы .h, но теперь у меня появляется повторяющийся символ ошибки _main в .... это кажется слишком сложным и очень тяжелым кодом по сравнению с другими учебниками по извлечению данных из база данных sqlite, единственная проблема со всеми учебниками, которые я видел, заключается в том, что все они импортируют весь первый столбец в представление таблицы, мне просто нужно указать, какая строка из базы данных и извлечь данные из этих столбцов строк. - person Greg; 06.04.2011
comment
Чувак, это было абсолютной болью, пытаясь понять последние несколько недель, я действительно ценю всю помощь, которую вы предложили, я просто не разочаровался в попытках выяснить что-то, что должно быть, и, вероятно, очень просто. - person Greg; 06.04.2011
comment
Очевидно, вы не импортируете fmdb.m в свой проект. Это просто так, поэтому у него есть собственный тестовый проект. Вам нужны классы, представленные шестью файлами FM .... - person matt; 06.04.2011
comment
Боже, я добавил этот файл .m, плохо! Кажется, теперь все работает нормально, хотя я не могу установить свойство text для своих полей. У меня все розетки / соединения настроены правильно, теперь где в вашем коде указывается, из какой строки он извлекается и как мне установить свойство text? Чувак, ты ОГРОМНО помог, я очень ценю все !! - person Greg; 06.04.2011
comment
Нигде в моем коде этого не происходит; Я просто забираю все (select *). Я уже говорил вам - изучение SQL - это совершенно другая проблема, не имеющая ничего общего с Cocoa или iPhone. А пока, чтобы убедиться, что это работает, просто установите пару свойств текста UITextField на значения из первой строки или что-то в этом роде. - person matt; 06.04.2011
comment
Привет, Мэтт, еще раз спасибо за ответ, ты чемпион! У меня есть довольно хорошая обработка SQL (за пределами iPhone). Я просто очень борюсь с синтаксисом, чтобы получить определенную строку и установить свойства текстовых полей для определенных столбцов в БД. Вместо (выберите *), что я могу использовать для получения информации из столбцов определенной строки, тогда myTextField.text = .....? Я чувствую, что мы почти у цели, и я так благодарен, что вы нашли время помочь такому родственнику, как я! Большое спасибо. - person Greg; 06.04.2011
comment
Привет, Мэтт, может ты кое-что прояснишь для меня? 1. people.db может ли это быть база данных .sql, которую я сохранил в папке с ресурсами? Docsdir остается прежним? 2. выберите * из людей. Люди - это имя таблицы базы данных? Здесь я могу указать строку? 3. [rs stringForColumn: @firstname]; является firstname одним из имени столбца базы данных? Я чувствую, что это решение находится в пределах досягаемости, вы были бы абсолютным спасителем, если бы мы смогли заставить его работать! Я пробовал ваш код для заполнения полей, но он ничего не загружает, я думаю, это потому, что не выбрана строка. - person Greg; 07.04.2011