Обработка нескольких таблиц в SQLite на Android - почему так сложно? - PullRequest
3 голосов
/ 22 августа 2011

Я отчаянно пытаюсь создать базу данных с несколькими таблицами, которая выглядит следующим образом:

nutrition.db:
Ingredient(ID, name, kcal); 
Meal(ID, name, ingredientId1, ingredientId2);
MealInstance(ID, mealId, date, amountOfIngr1, amountOfIngr2) ...

Я наткнулся на разные подходы - например, расширение класса Provider, такого как в учебнике блокнота ( расширяет ContentProvider), используя тонны коммутаторов или альтернативно создавая весь CRUD-интерфейс на основе .execSQL самостоятельно.Однако все это кажется нелепо сложным для такой простой (и общей?) Задачи, поэтому я считаю, что что-то упустил из виду.По какой-то странной причине все учебники, которые я проверял, используют только одну БД и одну таблицу.

Буду очень признателен за рекомендацию учебника или какой-нибудь намек.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Я рекомендую взглянуть на приложение Google ioshed .

Исходный код для базы данных: ioshed - исходный код базы данных

0 голосов
/ 19 февраля 2012

Чтобы создать приложение для Android, которое поддерживает более одной таблицы SQLite, вот один пример:

public class MyDatabase {

    private static final String DATABASE_NAME = "my_database.db";
    private static final int DATABASE_VERSION = 1;

    public static final String TABLE_ONE = "tableOne";
    public static final String TABLE_TWO = "tableTwo";
    public static final String TABLE_THREE = "tableThree";

    public MyDatabase(Context _context)
    {
        mDbHelper = new MyDbOpenHelper(_context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    //add code to declare your columns for each table
    //add methods for opening/closing database, etc...

    private static class MyDbOpenHelper extends SQLiteOpenHelper {

    //SETUP THE NORMAL SQLite COMMANDS THAT YOU USE TO CREATE A TABLE
    private static final String CREATE_TABLE_ONE = "create table if not exists " + TABLE_ONE...;
    private static final String CREATE_TABLE_TWO = "create table if not exists " + TABLE_TWO...;
    private static final String CREATE_TABLE_THREE = "create table if not exists " + TABLE_THREE...;

        public StatsDbOpenHelper(Context context, String name, CursorFactory factory, int version)
        {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase _db)
        {
            //ALL OF YOUR TABLES ARE CREATED HERE WHEN YOUR DATABASE IS FIRST CREATED
            _db.execSQL(CREATE_TABLE_ONE);
            _db.execSQL(CREATE_TABLE_TWO);
            _db.execSQL(CREATE_TABLE_THREE);
        }     
    }
}  
...