SQL の作成や PreparedStatement への設定等のタイミング・方法を合わせる(ために情報をどう保持するかの)構造を作るということでしょう。
以下は若干大袈裟ですが DataUpdateManager がそれらを担当しています。
(Main の update() はテストしていません。)
java
1import java.sql.*;
2import java.util.ArrayList;
3import java.util.List;
4
5class Data {
6 private String name, syainno, securitycd, password;
7 Data(String name, String syainno, String securitycd, String password) {
8 this.name = name;
9 this.syainno = syainno;
10 this.securitycd = securitycd;
11 this.password = password;
12 }
13 String getName() { return name; }
14 String getSyainno() { return syainno; }
15 String getSecuritycd() { return securitycd; }
16 String getPassword() { return password; }
17}
18
19class DataUpdateManager {
20 interface DataSetter {
21 void setTo(PreparedStatement ps) throws SQLException;
22 }
23 private class StringSetter implements DataSetter {
24 final int index;
25 final String data;
26 StringSetter(int index, String data) {
27 this.index = index;
28 this.data = data;
29 }
30 @Override
31 public void setTo(PreparedStatement ps) throws SQLException {
32 ps.setString(index, data);
33 }
34 @Override
35 public String toString() { return "StringSetter[index="+index+",data='"+data+"']"; }
36 }
37 private class IntSetter implements DataSetter {
38 final int index, data;
39 IntSetter(int index, int data) {
40 this.index = index;
41 this.data = data;
42 }
43 @Override
44 public void setTo(PreparedStatement ps) throws SQLException {
45 ps.setInt(index, data);
46 }
47 @Override
48 public String toString() { return "IntSetter[index="+index+",data="+data+"]"; }
49 }
50 private String sql;
51 private List<DataSetter> setters = new ArrayList<DataSetter>();
52
53 DataUpdateManager(Data ab) {
54 StringBuilder sb = new StringBuilder("UPDATE syain_m SET ");
55 if (!ab.getName().equals("")) {
56 if(!setters.isEmpty()) sb.append(", ");
57 sb.append("name = ?");
58 setters.add(new StringSetter(setters.size()+1, ab.getName()));
59 }
60 if (!ab.getSecuritycd().equals("")) {
61 if(!setters.isEmpty()) sb.append(", ");
62 sb.append("securitycd = ?");
63 setters.add(new IntSetter(setters.size()+1, Integer.parseInt(ab.getSecuritycd())));
64 }
65 if (!ab.getPassword().equals("")) {
66 if(!setters.isEmpty()) sb.append(", ");
67 sb.append("password = ?");
68 setters.add(new StringSetter(setters.size()+1, ab.getPassword()));
69 }
70
71 if(!setters.isEmpty()) {
72 sql = sb.append(" WHERE syainno = ?").toString();
73 setters.add(new StringSetter(setters.size()+1, ab.getSyainno()));
74 }
75 }
76
77 boolean needUpdate() { return sql != null; }
78 String getSql() { return sql; }
79 void setTo(PreparedStatement ps) throws SQLException {
80 for(DataSetter setter : setters) setter.setTo(ps);
81 }
82
83 @Override
84 public String toString() { return "DataUpdateManager[sql='"+sql+"',setters="+setters+"]"; }
85}
86
87public class Main {
88 public static void main(String[] args) throws SQLException {
89 DataUpdateManager dum = new DataUpdateManager(new Data("abc", "123", "789", "xyz"));
90 System.out.println(dum);
91 //if(dum.needUpdate()) update(dum);
92
93 dum = new DataUpdateManager(new Data("abc", "123", "", ""));
94 System.out.println(dum);
95
96 dum = new DataUpdateManager(new Data("", "123", "789", "xyz"));
97 System.out.println(dum);
98
99 dum = new DataUpdateManager(new Data("", "123", "", ""));
100 System.out.println(dum);
101 }
102
103 private static void update(DataUpdateManager dum) throws SQLException {
104 String url="dummy", user="dummy", password="dummy";
105 try (Connection con = DriverManager.getConnection(url, user, password);
106 PreparedStatement ps = con.prepareStatement(dum.getSql());) {
107 dum.setTo(ps);
108 ps.executeUpdate();
109 }
110 }
111}
実行結果
plain
1DataUpdateManager[sql='UPDATE syain_m SET name = ?, securitycd = ?, password = ? WHERE syainno = ?',setters=[StringSetter[index=1,data='abc'], IntSetter[index=2,data=789], StringSetter[index=3,data='xyz'], StringSetter[index=4,data='123']]]
2DataUpdateManager[sql='UPDATE syain_m SET name = ? WHERE syainno = ?',setters=[StringSetter[index=1,data='abc'], StringSetter[index=2,data='123']]]
3DataUpdateManager[sql='UPDATE syain_m SET securitycd = ?, password = ? WHERE syainno = ?',setters=[IntSetter[index=1,data=789], StringSetter[index=2,data='xyz'], StringSetter[index=3,data='123']]]
4DataUpdateManager[sql='null',setters=[]]