作ったのは Android Studio です。 以下のクラスですが、一目して ListView 用のクラスである事が解ると思います( toString が表示用 )。また、JSON を Google Gson でデシリアライズする事を想定しているので、C 言語の構造体のような単純な定義です。 WebData クラス
public class WebData { String 社員コード; String 氏名; String フリガナ; String 所属; String 性別; int 給与; String 手当; String 管理者; String 生年月日; String 生年月日2; String 所属名; @Override public String toString() { return 氏名; } }
この Class のインスタンスに、画面から入力データをセットし、Class 構造を取得して Update 文の where 以降以外を作成するコードが以下です。 buildUpdate メソッド
public String buildUpdate(String table, Object obj, Class<?> cls) { String result = ""; Field[] flds = cls.getDeclaredFields(); String type = ""; String col = ""; String val = ""; for( Field fld : flds ) { // null 値の場合無視 try { if ( fld.get( obj ) == null ) continue; } catch (IllegalAccessException e) { e.printStackTrace(); } // フィールド名( 列名に一致させた Class 定義 ) col = fld.getName(); try { // 値( 文字列 ) val = fld.get( obj ).toString(); } catch (IllegalAccessException e) { e.printStackTrace(); } // データ型 : この場合、int かそれ以外 type = fld.getType().getName(); if (!result.equals("")) { result += ","; } if (type.equals("int")) { if ( val.equals("") ) { result += String.format(" %s = null ", col); } else { result += String.format(" %s = %s ", col, val); } } else { if ( val.equals("") ) { result += String.format(" %s = null ", col); } else { result += String.format(" %s = '%s' ", col, val); } } } result = String.format("update %s set %s", table, result ); return result; }
※ 本来、StringBuilder 等を使用するところを += 演算子を使用しているのはコードを見やすくする為です エラー処理は最低限で作られていますが、重要なのは Field オブジェクトなので、ご理解下さい。 冒頭に、cls.getDeclaredFields() で、定義されている Field オブジェクトの配列を取得して、ループ処理しているだけです。 引数より、Object として、WebData のインスタンスが渡されて、fld.get( obj ).toString() でデータを取得し、fld.getName() として取得された文字列は列名と一致する事を想定しています。 あとは、fld.getType().getName() で、int かそれ以外でシングルクォートの使い方を決めるわけです。 以下は、その呼び出しコードです。
WebData curInput = new WebData(); String code = helper.getTextViewString(R.id.textViewCode); // 使用しないフィールドには null をセットする curInput.社員コード = null; curInput.所属名 = null; curInput.生年月日2 = null; curInput.氏名 = helper.getEditTextString(R.id.editText1); curInput.フリガナ = helper.getEditTextString(R.id.editText2); curInput.所属 = helper.getEditTextString(R.id.editText3); curInput.給与 = Integer.parseInt(helper.getEditTextString(R.id.editText5)); curInput.手当 = helper.getEditTextString(R.id.editText6); curInput.管理者 = helper.getEditTextString(R.id.editText7); curInput.生年月日 = helper.getEditTextString(R.id.editTexBirth); curInput.性別 = ((Spinner)(helper.mainActivity).findViewById(R.id.spinner)).getSelectedItemPosition()+""; String update = helper.buildUpdate("社員マスタ", curInput, WebData.class ); String text = update + String.format(" where 社員コード = '%s' ", code );
null を設定して、除外するフィールドを決めています。なので、このコードでは意図的に空文字を文字列の列にセットする事ができません。そういう場合は、仕様を追加します。
|
【2017 Android Studioの最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する
- Android Studio : エミュレータで Notification(通知)のテスト