戻る

メタ情報からオブジェクトストアを作成
indexedDB

メタ情報からオブジェクトストアを作成するサンプルです。
テーブルIDやフィールドなどを定義して
これらの情報をもとにオブジェクトスキーマを作成しています。

[サンプル]
copy
function metaTableDefine(dbName)
{
	let version = 1;
	const tableDef = 
	{
		table: "t1",
		fields: ["f1", "f2", "f3"],
		primaryKey: "f1",
		indexes: [
			{ name: "f2_index", field: "f2", unique: false },
			{ name: "f3_index", field: "f3", unique: true }
		]
	};
	const db = await openDatabase(dbName, version, (db) => 
	{
		if (db.objectStoreNames.contains(tableDef.table)) 
		{
			db.deleteObjectStore(tableDef.table);
		}
		const store = db.createObjectStore(tableDef.table, { keyPath: tableDef.primaryKey });
		tableDef.indexes.forEach(index => 
		{
			store.createIndex(index.name, index.field, { unique: index.unique });
		});
	});
}
function openDatabase(dbName, version, upgrade) 
{
	return new Promise((resolve, reject) => 
	{
		const req = indexedDB.open(dbName, version);
		req.onupgradeneeded = (event) => 
		{
			const db = event.target.result;
			upgrade?.(db, event);
		};
		req.onsuccess = (event) => 
		{
			resolve(event.target.result);
		};
		req.onerror = () => reject(req.error);
	});
}
metaTableDefine("sampleDB");

このサンプルでは、データベースが作られていないケースとします。
クラスでテーブルレイアウトのメタ情報を準備し、
このクラス配列からテーブルを作成するサンプルです。

const db = await openDatabase(dbName, version, (db) =>
データベースをopenします。

if (db.objectStoreNames.contains(tableDef.table))
tableDef.tableはクラス配列のtableフィールドの値「t1」です。
このサンプルのテーブル「t1」が存在している場合は
deleteObjectStoreメソッドでテーブルを削除しています。

const store = db.createObjectStore(tableDef.table, { keyPath: tableDef.primaryKey });
tableDef.primaryKeyは「f1」です。

tableDef.indexes.forEach(index =>
indexsフィールドの中に2つのクラス配列があるので
すべての配列をforEachで順番に取得しています。

store.createIndex(index.name, index.field, { unique: index.unique });
インデックスを設定しています。



戻る


著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームペーよびアプリ利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。