Как вы храните коллекцию строк в SQLite на Android? - PullRequest
5 голосов
/ 08 августа 2011

Я совершенно неопытен в использовании баз данных в приложениях, поэтому мне нужно немного рекомендаций.

У меня есть объект Java с несколькими примитивными полями и несколькими ссылками на объекты Strings и ArrayList.Примитивы и строки хорошо отображаются в доступных полях SQLite, но я не уверен, как сохранить персистентные списки массивов.

Я занимался двумя идеями, одна из которых заключается в сериализации списков ArrayLists и их сохранении в текстовом поле, а другая - иметь столбец, который указывает на таблицу с арностью 1, в которой я могу сохранитьотдельные строки, но я не уверен, как реализовать это в Android.Я открыт для разных подходов, но я не знаю, как реализовать последний в Java с использованием SQLite, поэтому решение было бы неплохо.Спасибо.

Ответы [ 3 ]

9 голосов
/ 09 августа 2011

Не зная дополнительных подробностей, я могу сказать, что учебный способ сделать это - создать вторую таблицу для списка массивов, а затем включить идентификатор первичной записи в список массивов.

ДляНапример, предположим, что ваш объект состоит из

String name;
int age;
ArrayList<String> hobbies;

. Вы могли бы создать таблицы следующим образом:

create table person (personid int, name varchar(30), age int);
create table hobby (hobbyid int, personid int, description varchar(30));

Тогда ваши данные могут выглядеть следующим образом:

Person
11   Bob    18
12   Sally  68
13   Ford   42

Hobby
21   11   fishing
22   11   hunting
23   12   needlepoint
24   12   rock-climbing
25   13   hitch-hiking   

Toполучить список чьих-либо хобби, вы бы использовали запрос, как:

select person.name, hobby.description
from person
join hobby on person.personid=hobby.personid
7 голосов
/ 09 августа 2011

Обычно (из того, что я узнал), если у вас есть объект, который сам содержит список других объектов, это будет отношение 1 ко многим (или, возможно, ко многим). Для хранения этих данных вы хотели бы использовать другую таблицу. В другой таблице у вас будет ваш первичный ключ для объекта, а затем внешний ключ, ссылающийся на родительский объект, к которому он принадлежит. См. эту ссылку для лучшего объяснения.

Пример:

CREATE TABLE User (
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name TEXT

);

CREATE TABLE UserPicture(
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    userId INTEGER,
    path TEXT

FOREIGN KEY(userId) REFERENCES User(_id)
);

Теперь скажите, что у вас есть пользовательский объект со списком пользовательских изображений, когда вы сохраняете в базу данных захочет перебрать каждое изображение и вставить каждое в таблицу UserPicture, используя userId как ссылка обратно на таблицу User.

В случае отношения «многие ко многим» каждый объект будет иметь список своих дочерних объектов. Лучшим примером этого была бы система членства / роли. Пользователь будет иметь список ролей и роль будет иметь список пользователей, так как пользователь может (как правило) быть в нескольких ролях, и роль, конечно, может иметь несколько пользователей. Для этого просто потребовалось бы то, что называется таблицей соединений. UserInRole будет иметь два столбца, UserID и RoleID, чтобы показать, что пользователь X принадлежит роли Y.

Что касается того, как его реализовать, поищите «учебник по Android sqlite». Здесь и здесь - это две ссылки с руководствами по настройке приложения базы данных sqlite для Android.

0 голосов
/ 08 января 2019

Вы можете использовать эту библиотеку, использовать аннотацию '@SaveList' в списке строк

//To save
EscapeSQLBoiler.getEscapeSQLBoiler(this).saveMyList("UniqueKey", strings);

//to get
strings = EscapeSQLBoiler.getEscapeSQLBoiler(this).giveMyListSavedInKey(UniqueKey);

Путь к библиотеке

https://dl.bintray.com/bipinayetra/maven/com/bipinayetra/save-processor/

https://dl.bintray.com/bipinayetra/maven/com/bipinayetra/save-annotation/

Загрузить

dependencies {
    annotationProcessor 'com.bipinayetra:save-processor:1.0.0'
    implementation 'com.bipinayetra:save-annotation:1.0.0'
}

Чтобы использовать библиотеку Сохранить список, добавьте плагин в свой buildscript:

allprojects {
    repositories {
        maven {
            url "https://dl.bintray.com/bipinayetra/maven"
        }
    }
}

Вы также можете просмотреть эту информацию в блоге

https://www.bipinayetra.com/products/2018/12/25/save-yourself-from-saving.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...