Вопрос по database, android, sqlite – Таблицы отношений в SQLite на Android

8

Можете ли вы помочь мне об отношениях между двумя таблицами в sqlite.

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

Ваш Ответ

3   ответа
1

http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/

// Table Create Statements
// Todo table create statement
private static final String CREATE_TABLE_TODO = "CREATE TABLE "
        + TABLE_TODO + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TODO
        + " TEXT," + KEY_STATUS + " INTEGER," + KEY_CREATED_AT
        + " DATETIME" + ")";

// Tag table create statement
private static final String CREATE_TABLE_TAG = "CREATE TABLE " + TABLE_TAG
        + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_TAG_NAME + " TEXT,"
        + KEY_CREATED_AT + " DATETIME" + ")";

// todo_tag table create statement
private static final String CREATE_TABLE_TODO_TAG = "CREATE TABLE "
        + TABLE_TODO_TAG + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
        + KEY_TODO_ID + " INTEGER," + KEY_TAG_ID + " INTEGER,"
        + KEY_CREATED_AT + " DATETIME" + ")";

SELECT * FROM todos td, теги tg, todo_tags tt WHERE tg.tag_name = & # x2018; Список наблюдения & # x2019; AND tg.id = tt.tag_id AND td.id = tt.todo_id;

/*
 * getting all todos under single tag
 * */
public List<Todo> getAllToDosByTag(String tag_name) {
    List<Todo> todos = new ArrayList<Todo>();

    String selectQuery = "SELECT  * FROM " + TABLE_TODO + " td, "
            + TABLE_TAG + " tg, " + TABLE_TODO_TAG + " tt WHERE tg."
            + KEY_TAG_NAME + " = '" + tag_name + "'" + " AND tg." + KEY_ID
            + " = " + "tt." + KEY_TAG_ID + " AND td." + KEY_ID + " = "
            + "tt." + KEY_TODO_ID;

    Log.e(LOG, selectQuery);

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            Todo td = new Todo();
            td.setId(c.getInt((c.getColumnIndex(KEY_ID))));
            td.setNote((c.getString(c.getColumnIndex(KEY_TODO))));
            td.setCreatedAt(c.getString(c.getColumnIndex(KEY_CREATED_AT)));

            // adding to todo list
            todos.add(td);
        } while (c.moveToNext());
    }

    return todos;
}
16

Внешние ключи, Внешний ключ - это поле в реляционной таблице, которое соответствуетКлюч-кандидат другого стола.

Например, скажем, у нас есть две таблицы, таблица CUSTOMER, которая включает в себя все данные клиентов, и таблица ORDER, которая включает в себя все заказы клиентов. Предполагается, что все заказы должны быть связаны с клиентом, который уже находится в таблице CUSTOMER. Для этого мы поместим внешний ключ в таблицу ORDER и отнесем его к первичному ключу таблицы CUSTOMER.

ВОграничения внешнего ключа SQLite можно добавить следующим образом:

редактировать:: Вы можете создать таблицу item_order как:

CREATE TABLE customer(
         id INTEGER,
         firstName TEXT,
         middleName TEXT,
         lastName   TEXT,
         address TEXT,
         contactNum TEXT
);

 CREATE TABLE item(
        id INTEGER,
        name TEXT,
        description TEXT
 );

 CREATE TABLE order(
        id INTEGER,
        customerID INTEGER,
        date TEXT,
        FOREIGN KEY(customerId) REFERENCES customer(id)
 );

 CREATE TABLE item_order(
        id INTEGER,
        orderID INTEGER,
        itemId  INTEGER,
        quantity INTEGER,
        FOREIGN KEY(orderId) REFERENCES order(Id),
        FOREIGN KEY(itemId) REFERENCES item(Id)
 );
После этого шага, как я могу вставить таблицу заказа товара. Потому что многие клиенты имеют много заказов. Чтобы вставить заказ, как можно & # x131; достичь таблицы заказов. user1417278
Обычно я использовал код ниже без каких-либо отношений. private void insertkisi (Строковое имя, Строковое письмо, Строковый меч) {SQLiteDatabase db = vnesne.getWritableDatabase (); ContentValues cv = new ContentValues (); cv.put (Veritabani.colName, name); cv.put (Veritabani.colAge, электронная почта); cv.put (Veritabani.colDept, pword); db.insert ("kisi", null, cv); db.close (); } user1417278
Спасибо тебе за все. Есть ли у вас какие-либо идеи в разделе кода о вставке удалить и обновить. Как я уже упоминал ранее, я все удалил обновление и вставил, но после отношений я не знаю, как & # x131; можно добиться удаления обновления и вставки запросов. Если вы поможете, я буду счастлив user1417278
@ user1417278 см. редактирование, код, который вы использовали для вставки значений без какого-либо отношения, можно использовать даже сейчас, пока вы не нарушите ограничения внешнего ключа.
@ user1417278, чтобы вставить значение, используйте тот же код, который вы использовали ранее, только позаботьтесь об ограничениях внешнего ключа. Это означает, что если вы вставляете значение в таблицу заказов, то соответствующий идентификатор клиента должен присутствовать в cutomer table.so при вставке первой вставки в таблицы клиентов и товаров, затем в таблицах order и item_order. аналогично, при удалении записей клиента сначала удаляются все записи этого клиента из таблицы заказа и item_order, а затем удаляются только записи из таблицы клиентов.
-1

вам следует почитать книгу или веб-сайт по основам программирования баз данных SQL. Вы создаете связь между двумя таблицами, добавляя ключ (или поле) одной таблицы в другую таблицу. Но на самом деле, вы должны сначала ознакомиться с sql. После того как вы это сделали, вы можете создавать отношения или вам будет удобно использовать Ormlite.

Похожие вопросы