Cursorをcloseするタイミング

先日書いた「AndroidでSQLiteをつかう」にのせたコード(をベースにしたコード)をコードレビューしてもらった。
いろいろと指摘されたことをメモしておく。

主に改善点があるコード

改善点
・JSON文字列を作るにはJSONArrayとJSONObjectを使う。
・Cursor(に限らず)を閉じるというような処理は、finallyの中でやるのが鉄則。

改善後のコード

JSONArrayとJSONObjectはそういうのがあるんだなという感じでOK。

Cursorをcloseするタイミングに関しては「ほぉ」と思った。
僕はここ3年間ずっとPHPをやってきたが、PHPには「finally」は存在しない。なので「finally」の存在をすっかり忘れていた。

SQLiteDatabaseも同様のタイミング(finallyの中)でcloseすると間違いはない。
また try ~ catch まみれになるがJavaはそういうものらしいので気にしない。

参考 : カーソルが解放されるタイミング (2)

おわり。

Pocket

Posted in Android, Java.

AndroidでSQLiteをつかう

Androidのデータ保存方法のひとつにSQLiteがある。

wikipediaより引用
SQLite はMySQLやPostgreSQLと同じデータベース管理システムであるが、サーバとしてではなくアプリケーションに組み込んで利用される軽量のデータベースである。

SQLが使えるのでそれなりに複雑なことができるし、電源を落としたからデータが消えるとかいうこともない。
消えてほしくないデータをごにょごにょするにはSQLiteがつかえる。
ちなみにiOSでも使える。

SQLiteを操作するライブラリはAndroid SDKで提供されているのでそれを使うことになる。
http://developer.android.com/reference/android/database/package-summary.html
http://developer.android.com/reference/android/database/sqlite/package-summary.html

ということで、テスト的に書いてみた。

SQLitePlugin.java

SQLiteTestActivity .java

そんなにきちんと書いていないが、まぁこんなもんだと思えばよいと思う。

いちおう補足。

SELECT文の結果はJSONっぽい文字列に整形するようにしている。
例えば、今回のコードを実行すると [{"str":"hoge","str2":"hoge"},{"str":"fuga","str2":"foo"}] が標準出力される。

SQLiteDatabaseには「insert」「update」「delete」「query」などの関数が用意されていて、それを使うとSQL分を書かずにデータを操作できる。
僕は日頃からSQLを書いていて、上記の関数を使う方が面倒なので「execSQL」「rawQuery」を使うようにした。

またお気づきだとは思うが、このコードだとプレースホルダを全く使ってないのでSQLインジェクションという脆弱性を抱えている。
これについてはSQLiteStatement、SQLiteQueryBuilderとかいうそれっぽいのがあるので調べてみるとよいかと。
僕も調べます。

記事を書いといてなんだが、mucchinのAndroid戦記 – Androidアプリのデータ保存方法の一つ「SQLite」の使い方 がわかりやすいので詳しくはこちらを参照するとよいと思う。

おわり。

Pocket

Posted in Android, Java.

LinuxにJDKをインストールする

http://java.sun.com/javase/ja/6/download.html
英語ページに移動して、「Linux x64 – RPM Installer」のインストールリンクのURLをコピペする。
※僕が実行したときは「http://download.oracle.com/otn-pub/java/jdk/6u26-b03/jdk-6u26-linux-x64-rpm.bin」でした。

以降はターミナルで実行する。

java -versionでJAVAのバージョンが表示されれば終了。
一応動くか確認するために、HelloWorldを動かしてみるといいかも。

Pocket

Posted in Java.