スポンサーサイト

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

Android SQLiteのDBファイルをSDカード上に作成する方法


SQLiteのDBファイルをSDカード上に作成


 通常、アプリでSQLiteを利用する場合にできるDBファイルは、そのアプリの配下に作成されます。
作成される場所は「/data/data/(package_name)/databases」です。
パッケージの配下に「databases」というフォルダを作成し、そこにDBファイルを作成します。

 そこで今回は、デフォルトでパッケージ配下に作成されるDBファイルをSDカード上に作成する方法を記述します。

○SDカードに作成されたDBファイル

※AndExplorerにて確認

○実行結果


※2010年時点
■メリット(だと思われる・・・)
・大容量のDBファイルが構築できる(端末容量<SDカードのため)
・DBファイルがアプリに依存していないため、他のアプリからもアクセスできる

■デメリット
・SDカードが必須。PC接続時にSDカードをマウントしていると、端末上でSDカードの認識ができないため、
 アプリが異常終了する(Xperiaで確認)

■注意点
・SQLiteOpenHelperを利用しない
 正確には「利用できない」です。
SQLiteOpenHelperでのDBファイルの指定の際に、フォルダ構成を示す「/」スラッシュが入っていると
エラーとなってしまうからです。
SDカード上のDBファイルを開くには、ルートからそのDBファイルまでのパスが必要になり、必然的に「/」が
含まれてしまいます。
そのため、SQLiteOpenHelperを利用せずに自前でのコーディングが必要となります。



■自前のSQLiteOpenHelper

DBに接続し、コネクションを返すクラスを作成します。

○SQLiteHelperクラス

package sdcard.sqlite;

import java.io.File;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

public class SQLiteHelper {

String folder = "/sqlitefile"; // DBファイルを格納するフォルダ①
String dbfile = "/sqlite.db"; // DBファイル名

// コネクションの生成
public SQLiteDatabase openConnection() throws SQLException {

// SDカードのパス
File file = Environment.getExternalStorageDirectory();②
// フォルダの生成
String fol = file.getPath() + folder;③
if (new File(fol).exists() == false) {
new File(fol).mkdir();
}
// DBまでのパス
String dbpath = fol + dbfile;

SQLiteDatabase db = null;
db = SQLiteDatabase.openOrCreateDatabase(dbpath, null);④
return db;
}

}

①SDカードに作成するフォルダと作成されるDBファイル名の指定です
②「Environment.getExternalStorageDirectory();」でSDカードのパスを取得します。
③ ①で設定したフォルダをSDカード上に作成します。
④「SQLiteDatabase.openOrCreateDatabase(dbpath, null);」でSQLiteのDBコネクションを生成します。


■アクティビティ
DBのコネクションを取得し、テーブルの作成、データの登録、参照を行います

○SQLite4SDアクティビティ

package sdcard.sqlite;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.TextView;

public class SQLite4SD extends Activity {@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SQLiteDatabase db = null;
Cursor c = null;
try {
// DBコネクション生成
db = new SQLiteHelper().openConnection();①

// テーブルの作成
String q = " CREATE TABLE TEST(ID TEXT,NAME TEXT)";②
db.execSQL(q);

// データの登録
q = " INSERT INTO TEST(ID,NAME) ";③
q += " VALUES(?,?) ";
Object[] bind = {
"0001", "hoge"
};
db.execSQL(q, bind);

Object[] bind2 = {
"0002", "pu"
};
db.execSQL(q, bind2);

// データの抽出 ④
q = " SELECT * FROM TEST";
c = db.rawQuery(q, new String[] {}); // 実行
String[] colname = c.getColumnNames(); // 列名取得
String rst = "";
while (c.moveToNext()) {
String line = "";
for (int i = 0; i < colname.length; i++) {
String cn = colname[i];
line += cn + "=" + c.getString(i) + " ";
}
rst += line + "\n";
}

TextView tv = new TextView(this);⑤
tv.setText(rst);
this.setContentView(tv);
} finally {
if (db != null) db.close();
if (c != null) c.close();
}
}
}


①自作SQLiteクラスからDBコネクションを取得します。
②テーブルを作成します。
③データの登録を行います。
④登録したデータを取得します。
⑤取得した内容を表示します。


■マニフェストファイル
今回はSDカードにアクセスするため、マニフェストファイルに以下を記述します

<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="sdcard.sqlite"
android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SQLite4SD" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>①
</manifest>

① uses-permissionに「android.permission.WRITE_EXTERNAL_STORAGE」を追加します。
スポンサーサイト

テーマ : android
ジャンル : コンピュータ

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。