使用 `PreparedStatement` 時,手動呼叫 `setString(1, ...)`、`setInt(2, ...)` 既繁瑣又易出錯。本工具方法接受 `List
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
public class JdbcParamUtil {
/** 將 List 參數依序綁定至 PreparedStatement (索引從 1 開始) */
public static void bindParams(PreparedStatement ps, List<?> params) throws SQLException {
if (params == null) return;
for (int i = 0; i < params.size(); i++) {
Object val = params.get(i);
int idx = i + 1; // JDBC 參數索引從 1 開始
if (val == null) {
ps.setObject(idx, null);
} else if (val instanceof String) {
ps.setString(idx, (String) val);
} else if (val instanceof Integer) {
ps.setInt(idx, (Integer) val);
} else if (val instanceof Long) {
ps.setLong(idx, (Long) val);
} else if (val instanceof Double) {
ps.setDouble(idx, (Double) val);
} else if (val instanceof Boolean) {
ps.setBoolean(idx, (Boolean) val);
} else if (val instanceof java.util.Date) {
ps.setTimestamp(idx, new java.sql.Timestamp(((java.util.Date) val).getTime()));
} else if (val instanceof java.sql.Date) {
ps.setDate(idx, (java.sql.Date) val);
} else {
// 兜底:交給 JDBC 驅動處理
ps.setObject(idx, val);
}
}
}
}
String sql = "INSERT INTO users(username, age, email, created_at) VALUES (?, ?, ?, ?)";
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
List<Object> params = Arrays.asList("Alice", 25, "alice@example.com", new Date());
JdbcParamUtil.bindParams(ps, params);
ps.executeUpdate();
}