我必须根据以下条件编写 JDBC 插入查询:
根据以下键,该包不得出现在表中: 包裹不得有“D” 包裹必须具有以下踢出状态之一(AK、BK、GK、CK、QK) ACT001F 中的解析匹配标志 (RESOLVE_MATCH_FLAG) 不得为 Y 或为 NULL 停靠点 ID/类型不得在 Kickout_Resolve 文件中进行解析,这可以通过表的原始停靠点字段中完全缺少停靠点来指示,或者如果停靠点位于表中,则表明记录中没有已解析的停靠点。 KICKOUT_CORRECTIONS_DETAIL 表中不得出现停靠点 ID/类型,如与原始停靠点 ID 和类型相匹配的配送停靠点 ID 和类型以及文件中的预计设施日期 = 活动包裹 Feed 中的配送日期以及是否存在追踪 ID。
我已经编写了以下查询,但需要添加条件,任何人都可以帮助我。
INSERT INTO FXG_VCAPI_SCHEMA.KICK_OUT_STATUS
(TRAK_ID, PCKUP_SQ_ID,VINTAGE,EFD,STOP_ID,STOP_ID_TP,KICKOUT_STAT,KICKOUT_ST,BEGIN_PCKUP_TM, END_PCKUP_TM, CNFRM_NBR, PCKUP_TP, CO_NM, CONT_NM, PRIM_ADR, SCNDY_ADR, CITY, STATE, PSTL_CD, HOUSE_NM, STR_NM, CNTRY_CD, HIGH_RISE_IND, GEOCODE_VNDR, GEOCODE_LAT, GEOCODE_LON, GEOCODE_SCR, VALID_GEOCODE_IND, ZIP_CONF_SCR, VALID_ADDR_IND, FAC_NM, NTWK_CD, KICKOUT_TP, CREATED_DT, UPDATED_DT)
VALUES ('2070881', '119052302274900001', '201306',SYSDATE,'500000001444168', 'I','AK', 'A','GK', '', '', '', '', 0, '', '', '', '', '', 0, '', 0, 0, 0, '', 0, '', 0, '', '', '',SYSDATE,SYSDATE);
:)
我想你可以看一下很多SQL验证。它将确保始终有符合您期望的数据,而不是在 java 中进行所有验证。
例如,SQL CHECK语句。它允许您为表创建自定义规则,如果您尝试插入的数据与您的规则不匹配,则会抛出 SQL 异常。 https://www.w3schools.com/sql/sql_check.asp
像 KICKOUT_ST 这样的列可以是一个ENUM,其值('AK'、'BK'、'GK'、'CK'、'QK')专门强制这些值 https://www.geeksforgeeks.org/enumerator -enum-in-mysql/
对于少数不应该为空的列,请确保应用 NOT NULL 语句。https://www.w3schools.com/sql/sql_ref_not_null.asp
我不知道在 Java / JDBC 中是否有一致的方法来进行这些验证。也许你可以使用 Hibernate、JPA 和/或 Spring Data 找到它,但如果你真的想确保输入数据与你的 java 模型匹配,你必须手动进行检查(除了 SQL 验证之外):)