作ったのは 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(通知)のテスト






