「研究しましょう」 ブログ 日記 マガジン 小耳情報

    やりたいことを探してネットをさまよう、そんな私のブログです --- I'm here. Find me out. 我在这里 查找和
0

【Android な夜に】Android で、SQLite を使うTIPs : 2回目以降に使うと、テーブルが作られない問題がある ★   #Androidプログラミング入門 #GRATINA4G #kyf31 #AQUOSK #SHF32

 Android は、標準で SQLite が使える様になっているらしい。どうやって使うかは、SQLiteOpenHelper を継承したクラスからアクセスする。

そのクラスは色々な人が色々な物を作って公開している。かくかく、それぞれの書き方があって、わかりにくい。その中で、私が、これは分かるかも、と思ったのが、絶版になった、

  「 Android SDK 開発のレシピ」

のサンプルプログラムの物。

それは、「ここ」で公開されている。その中の「recipe101」の MySQLiteOpenHelper.java というサンプルコードがそれ。クラス名は MySQLiteOpenHelper だ。ライセンスは、どんな風に使ってもいいという物。嬉しい。

以下にソースファイルをアップしておいた。FC2 のアップロード規定で、.txt しか許されなかったので、自分で「.txt」を「.java」に変えてください。

 (1) オリジナルの MySQLiteOpenHelper.java
 (2) 私が手を加えた MySQLiteOpenHelper_edit4blog.java

上の (2)の方で、私が手を加えたのは、以下のところ。

・①でデータベース名を変えられる様に final を取った④が、それを使った、コンストラクタ。でも、最初に super() をしなくてはいけないらしく、引数のチェックが掛からないまま、オブジェクトを作りに行ってしまう。

・②は、テーブルを作る SQL 文を、String の配列で渡して、onCreate() で作る様にした物。

 次の話題に行って、Android の SQLite ではまったのが、データベース本体のできる場所。さっきのサンプルの様に、ファイル名に DBname だけを指定すると、

  /data/data/package-name/databases/DBname.db

にできちゃって、どうやっても触れなくなる。これを消すには、その時に作ったアプリを「削除」してやるしかない。ところが、その前に、パッケージ名を変えてしまうと、もう、だめ。ゴミと化す。(root ブレイクした物だったら触れるのでしょうけど)

こんな状況にならない様に、自分の触れるローカルに置く様にした方がいい。たとえば、

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) + "/myplace/database.sqlite"

みたいなところ。

利用方法は、まず、SimpleDatabaseHelper の参照を得る。

//DBの準備: db_helper の生成と保存
SQLiteDatabase db = null;
try {
// データ保存ディレクトリの変更にトライ
File DBPath = new File(mDataPath.toString(), DBNAME);
// DBとテーブルの作成( SimpleDatabaseHelper を改造した)
db_helper = new SimpleDatabaseHelper(this, DBPath.toString(), SQL4Table);
db = db_helper.getWritableDatabase();
// メディアスキャナにスキャンさせる(ギャラリーに反映させ「外部ストレージ」に表示させる)
MediaScannerConnection.scanFile(this, new String[]{
DBPath.toString()
}, null, null);
} catch( SQLException e) {
String error = e.toString();
} finally {
if (db != null) db.close(); //しない方がいいという意見が多い
}

下の様に、db_helper さえ手に入れてしまえば、あとはなんだってできる。

  SQLiteDatabase db_sql = db_helper.getWritableDatabase();

もう少しわかりやすい例では、
//テーブルデータの削除
private void resetTableDatas(String table) {
SQLiteDatabase db = null;
try {
db = db_helper.getWritableDatabase();
db.delete(table, null, null);
} catch (SQLException e) {
Log.e("ERROR", e.toString());
} finally {
if (db != null) db.close();
}
}
という感じ。

ここでは、テーブルの削除に db.delete(table, null, null); 等というメソッドを使っているけど、

  db.execSQL( "drop table " + table + " ;");

と、このように、SQLコマンドにした方が、分かりやすいカモ。私は、SQL派。

 と、ここまで。これ、自分で書いてて思ったけど、

  「何のことだか全然分からない」

('ェ')NoWay

0

黄色い色に誘われて・・・、残り少ない、冬の装備品  #東京 #気温 #WindowsUpDate

黄色黄色
 道ばたの植え込みのあたりは、マーガレット系の花と、いちょうの落ち葉で、しあわせの黄色い色が広がっていた。

この景色とは裏腹に、ここ数日の東京の朝は寒い。今の、冬の装備は、これだ。

 ・ジャケット
 ・コート(インナー付き)
 ・ボディーヒーターももひき

これでは、寒くて、手袋も急遽出された。

さてさて、残る防寒着は、

 ・マフラー
 ・ダウンのコート
 ・服の重ね着

あ、防寒装備の残りが少なくなってきた。もう、ボディーヒーター2枚ばきぐらいしか、思いつかない。

 昨日、Windows10 のアップデートがあったんだけど、何回かリブートしたり、パスワードがおかしくなったり、foobar2000 がおかしくなったり、もう、散々だった。

  「これ、ウイルスじゃね?」

今は、再起動したら、落ち着いている。あ、てか、

  「 Fall Creators Update

って、こクリエーターずアップデートって奴か?私のところには、今頃、降りてきたのか?あ、あれは「2017年 4月11日 Creators Update 」の方か、あぁ、謎すぎる。

リナックスがどうの、のアップデートは終わったのか? PC環境、いろいろ調べないと。

さてと、ねぼけて明日の朝の分のクスリを飲んでしまったので、もう、寝よっと。

該当の記事は見つかりませんでした。