Android開発の…じゃなくてjavaの基礎

研修でAndroidアプリの開発を行っているが
根底のjavaの知識がなさすぎて厳しいと感じる.

十分に理解できず,テストコードをいじって
走らせることはできても何だか気持ちが悪い.


[@Override]
何故かjava研修で習わなかったが,
Androidソースコードには必ず含まれる記述.

調べるとすぐに見つかるが明示的オーバーライド.
この記述を行って継承もとのメソッドを
オーバーライドする際にメソッド名を誤ると
コンパイルエラーが発生する.
この記述がなく,オーバーライドしたつもりで
メソッド名を誤って記述すると普通のメソッド定義に…


[throws]
研修ではメソッド内部でtry〜catchを行うことが多く,
throwsを使う機会は多くなかった.
しかし,Activityでないクラスで発生したエラーについて
エラーダイアログなど画面処理を行う時には非常に便利.

今回はSQLiteの例外処理で活躍してくれた.
ActivityからDB操作のメソッドを呼び,エラーが出たら
例外を丸投げして,Activity側でcatchする.


[プリペアドステートメント]
SQLiteではcompileStatement
ユーザ入力をクエリの一部とする時に真価を発揮するが
普通に便利な機能である.
まずは,PSNの障害の原因かもしれないとされる
SQLインジェクションを予防できる.
次にクエリが見やすい.意外と重要.

コードで比較すると

通常
db.execSQL("insert into テーブル (カラム1, カラム2, ...)
         values ( '" + データ1 + "', '" + データ2 + "', ...)" );

プリペアドステートメント
SQLiteStatement stmt = db.compileStatement(
         "insert into テーブル (カラム1, カラム2, ...)
         values (?, ?, ...);");
stmt.bindXXX(1, データ1);
stmt.bindXXX(2, データ2);
...
stmt.execute();

通常の方法だと,変数をクエリに混ぜるだけでも面倒で
読みにくいことは明らかである.

まだまだ,あるが本日はこの辺りで.