0

2 つのテーブルを結合する方法を知る必要があります。私はこれが初めてなので、テーブルの結合を行う方法がわかりません。

1 つのデータベースに 5 つのテーブルを作成する AnniversaryDBAdapter.class を作成しました。join buddiesList テーブルと like テーブルのように、2 つのテーブルを結合するだけです。

以下は、AnniversaryDBAdapter.class のコードです。

public class AnniversaryDBAdapter
{

    private static final String DATABASE_NAME = "AllTables";
    private static final int DATABASE_VERSION = 2;

    private static final String CREATE_TABLE_BUDDIESLIST = " create table buddiesList(name_id integer primary key autoincrement, name text not null);";
    private static final String CREATE_TABLE_LIKES = " create table likes(name_id integer primary key autoincrement,likes text not null);";
    private static final String CREATE_TABLE_DISLIKES = " create table dislikes(name_id integer primary key autoincrement, dislikes text not null);";
    private static final String CREATE_TABLE_EVENTS = "create table events(date_id integer primary key autoincrement, name_id text not null, date text not null, title_id text not null, starttime text not null, endtime text not null);";
    private static final String CREATE_TABLE_TITLE = "create table titles(title_id integer primary key autoincrement, name text not null, image text not null);";

    private final Context context;
    private static final String TAG = "DBAdapter";

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public AnniversaryDBAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }




private static class DatabaseHelper extends SQLiteOpenHelper
{

    DatabaseHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL(CREATE_TABLE_BUDDIESLIST);
        db.execSQL(CREATE_TABLE_LIKES);
        db.execSQL(CREATE_TABLE_EVENTS);
        db.execSQL(CREATE_TABLE_TITLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        Log.w(TAG, "Upgrading database from version "+oldVersion+" to "+newVersion+", which will destroy all old data");

        onCreate(db);

    }

}


public AnniversaryDBAdapter open() throws SQLException
{
    this.db = this.DBHelper.getWritableDatabase();
    return this;
}

public void close()
{
    this.DBHelper.close();
}

}
4

2 に答える 2

2

テーブル レイアウトを次のように修正するとします。

CREATE TABLE buddiesList(
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name TEXT NOT NULL
);

CREATE TABLE likes (
    _id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    buddy_id INTEGER REFERENCES buddiesList(_id) ON DELETE CASCADE NOT NULL,
    likes TEXT NOT NULL
);

これで、セットアップVIEWで と のJOINbuddiesListにを作成できます。likes選択すると、通常のテーブルのように機能します。更新/削除または挿入することはできません (もちろん TRIGGER をいじる必要はありません)。

CREATE VIEW buddyLikes AS 
    SELECT buddiesList.*, likes._id AS likes_id, likes.likes as likes 
    FROM buddiesList LEFT JOIN likes ON buddiesList._id=likes.buddy_id;

Aは、テーブルやトリガーと同様に -Viewを使用して作成されます。execSQL

ビューを使用すると、次のように、仲間といいね! の間の結合から選択して、すべての仲間とそのいいね! をすべて返すことができます。

SELECT * from buddyLikes;

次のようなものが返されます。

_id  name   likes_id  likes
1   |Ted   |5        |Facebook
1   |Ted   |4        |Murder
2   |Ed    |1        |Beer
2   |Ed    |2        |Cats 
2   |Ed    |3        |Stock-car racing
3   |Red   |6        |Bananarama

ところで:データベースで外部キーのサポートが必要な場合は、次のように呼び出す必要がありますexecSQL

PRAGMA foreign_keys = ON

あなたのSQLiteOpenHelper#onOpen(SQLiteDatabase db)

于 2012-08-15T06:09:51.340 に答える