DB ファイルを /data/data/ 以外のところに作ろうとして、はまった。実際は、DBファイルの場所を変えるのは正しいコードだったんだけど、テーブルを作る部分で、テープル名に、
「 TABLE-001 」
のように「-」ハイフォンを使ったのが原因だった。これで、テーブルを作るところで Exception をおこしていた。SQLite の仕様か SQL の仕様か、とにかくここを直したらうまくいった。
SQLite は SimpleDatabaseHelper クラスを使ってアクセスした。/data/data/ の下にDBファイルを作りたくないときは、
static final private String DBNAME = "mouth_movie.sqlite";
のファイル名のところに、
DBNAME = "/temp/user/mouth_movie.sqlite";
みたいな形で、フルパスで設定すれば、そこに作られる。
このクラスは、DBファイルが作られるときに、1回だけ、onCreate() でテーブルを作る様になっている。これ、そこで作らない方が、いい。そこの db.execSQL() でテーブルを作っているところを、そっくりそのまま、別のところに書けばいい。
あと、DBを作るところは、
try {
db_helper = new SimpleDatabaseHelper(this, dbname);
db_sql = db_helper.getWritableDatabase();
// メディアスキャナにスキャンさせる
//(ギャラリーに反映させ「外部ストレージ」に表示させる)
MediaScannerConnection.scanFile(this, new String[]{
DBPath.toString()
}, null, null);
} catch( Exception e) {
String error = e.toString();
}
のように、かならず Exception をキャッチしてやらないと、デバッグで苦労するので、手を抜かない様に。
db_helper = new SimpleDatabaseHelper(this, dbname);
のところで、私は、SimpleDatabaseHelper() の引数に DBファイル名を渡して、
public SimpleDatabaseHelper(Context context,String db_name ) {
super(context, db_name, null, VERSION);
}
のように、新しいコンストラクタを作った。以上!
あぁ、こんな書き方して、誰かの参考になるんだろうか?手の抜きすぎかも。
さてと、明日は、インテントで別なアクティビティを起動するところを作ろう。
あ、そうだ、動画を録画するところも、ちゃんとまとめて、メモしないとね。かなり手こずったから。