作ったのは 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 を設定して、除外するフィールドを決めています。なので、このコードでは意図的に空文字を文字列の列にセットする事ができません。そういう場合は、仕様を追加します。