戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SQLite データベースを取得・作成する:openOrCreateDatabase

Android では SQLite データベースを扱う API が複数用意されています。
その中で、データベースを作成、取得する方法は以下のとおり。

SQLiteOpenHelper
SQLiteDatabase#openOrCreateDatabase
Context#openOrCreateDatabase

上記のいずれを使ってもデータベースを作成することができますが、それぞれ作成されるデータベースのファイルパーミッションが異なります
どのようなファイルパーミッションが設定されるかは上から順に以下のとおり。

・660 (他のアプリからアクセス不可)
・644(他のアプリから読み取り可能)
・指定可能(660 or 662 or 664 or 666)

なお、データベースはファイル名だけを指定した場合、システムメモリ(/data/data[パッケージ名]/databases/)に作成されます。
SDカードに保存する場合は『SQLite データベースをSDカードに保存する』を参照してください。

参考サイト: CodeZine - AndroidアプリにおけるDBファイルの正しい使い方

API Reference: SQLiteOpenHelper, SQLiteDatabase, Context

以下、それぞれの使い方。
----------------------------------------------------------------------
SQLiteOpenHelper
package jp.inujirushi.android.sample;

import jp.inujirushi.android.sample.sql.SampleSQLiteOpenHelper;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// SQLiteOpenHelper クラスを使ってデータベースを取得する。
SampleSQLiteOpenHelper helper = new SampleSQLiteOpenHelper(this);

// 書き込み可能なデータベースを取得(作成)する
SQLiteDatabase writableDB = helper.getWritableDatabase();

// 読み取り専用のデータベースを取得する(作成はされない)
SQLiteDatabase readableDB = helper.getReadableDatabase();
}
}
SQLiteOpenHelperContext#openOrCreateDatabase を使用してデータベースを作成しています。
Context#openOrCreateDatabase ではファイルパーミッションを指定することができますが、こちらは他のアプリケーションからアクセスできないように固定されています

SQLiteOpenHelperクラスの使い方は『SQLite データベースを管理する : SQLiteOpenHelper』を参照してください。

----------------------------------------------------------------------
SQLiteDatabase#openOrCreateDatabase
package jp.inujirushi.android.sample;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// SQLiteDatabase クラスを使ってデータベースを取得 or 作成する
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
"sample.db", null);
}
}
SQLiteDatabase#openOrCreateDatabase ではファイルパーミッションが指定されておらず、他のアプリから読み取り可能となっています
アプリケーションの脆弱性の原因となるので使う際には注意してください。

----------------------------------------------------------------------
Context#openOrCreateDatabase
package jp.inujirushi.android.sample;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Context クラスを使ってデータベースを取得(作成)する
SQLiteDatabase database = openOrCreateDatabase("sample.db",
Context.MODE_PRIVATE, null);
}
}
唯一、ファイルパーミッションを指定してデータベースを作成することができます
ファイルパーミッションは第二引数で指定することができ、指定できる値は以下になります。

Context.MODE_PRIVATE
660:呼び出し元のアプリケーションのみ読み書き可

Context.MODE_WORLD_READABLE
664:他のアプリケーションも読み込み可

Context.MODE_WORLD_WRITEABLE
662:他のアプリケーションも書き込み可

Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE
666:他のアプリケーションも読み書き可

----------------------------------------------------------------------
この内容だけを見ると、SQLiteDatabase#openOrCreateDatabase はいらないと思います。

しかし、Android 2.1 以前は Context を使用したデータベースの作成(参照)でスラッシュを使うことができません
そのため、Android 2.1 以前でSDカードに保存する場合には、スラッシュが許可されている SQLiteDatabase#openOrCreateDatabase を使う必要があります。

使い方については(そのままメソッド呼ぶだけですが…)、『SQLite データベースをSDカードに保存する』で SQLiteOpenHelper を使った実装例を紹介しています。
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。