import java.util.ArrayList; import java.util.List; /** * @author lxc on 2019-6-4 15:57. */ public class Test { public static List<String> sqlTypeList; public static void main(String[] args) { //预编译sql String sql = "insert into INFO ( ID_INFO, SOURCE, SYSTEME, TEM_ID, TAT_NO, CHANNECE_CODE, DEP_CODE, SYST_FROM, STATE, CREATED_BY, RENE_TYPE, INNCYPE, INSE_END_TIME, RENEWRATE, OPERAYPE, INSNCE_BEGIN_E, TYPE_RCE, UPDATED_BY, CLAIMES, CENTILE, CHANN_DETAIL_CODE, APPLY_PO_NO_S, POLICY_NS, APPPOLI_J, POL_J, APPLY_PO_NO_F, POLIC_F, OFFEMOUNT_S, OFFOUNT_J, FLWID, ISOINE )values( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) "; //插入的值 String values = "8A7B61F16CB32CAFE053060B1F0A49F5(String), 7(String), M3IT(String), 1120107007(String), 粤A*(String), 7(String), " + "2041033(String), PTS(String), 0(String), system(String), zb(String), 3(String), 2020-06-04 23:59:59.0(Timestamp), " + "0(Integer), 1(String), 2019-06-05 00:00:00.0(Timestamp), 3(String), system(String), 0(Integer), 63(Integer), L(String), " + "50410333900218711135(String), 10410333900155881437(String), 50410333900218711136(String), 10410333900155881438(String)," + " 50410333900218711133(String), 10410333900155881438(String), 1432.19(BigDecimal), 147.5(BigDecimal), " + "0.0(BigDecimal), N0MiXA3X5NqmIeeN(String), 1(String)"; getSql(sql,values); } /** * description:获得insert sql语句 * @date: 2019-6-6 15:49 * @author: lxc * @param sql * @param values * @return */ public static String getSql(String sql ,String values){ //字段值 String value = ""; //截取后的字段值 String blanceValues = ""; //临时字段值 String temp = ""; List<TypeValue> valueList = new ArrayList<>(); Test test = new Test(); do { int index = 0; for(int i = 0; i < Test.SqlTypeList().size(); i++){ String sqlType = Test.SqlTypeList().get(i); //匹配整个串的第一个值 int tempIndex = values.indexOf("), "); if (tempIndex > 0) { //截取匹配到的第一个值 temp = (values.substring(0, tempIndex + 2)); }else { temp = values; } //根据 index = temp.indexOf(matchString(sqlType)); if (index > 0) { System.err.println("index:"+index); value = values.substring(0, index); System.err.println("value:"+value); try { blanceValues = values.substring(index + sqlType.length() + 3, values.length()); }catch (Exception e){ //最后没有逗号 blanceValues = values.substring(index + sqlType.length() + 2, values.length()); } System.err.println("blanceValues:"+blanceValues); //去掉前后空格 values = blanceValues.trim(); TypeValue typeValue = test.new TypeValue(); typeValue.setSqlType(sqlType); typeValue.setValue(value); valueList.add(typeValue); break; } } if (index < 0){ //如果index小于0,则匹配不上,直接value = null value = null; } }while (value != null && !"".equals(value)); System.err.println(valueList.size()); int firstLeftBracketIndex = sql.indexOf("("); String tempSql = sql.substring(firstLeftBracketIndex,sql.length()); int firstRightBracketIndex = sql.indexOf(")"); tempSql = sql.substring(firstLeftBracketIndex,firstRightBracketIndex); System.err.println(tempSql); String[] tempSqls = tempSql.split(","); System.err.println(tempSqls.length); if (tempSqls.length != valueList.size()){ System.err.println("入参与占位符个数不一致,入参长度:"+valueList.size()+",占位符个数:"+tempSqls.length); } for (TypeValue typeValue:valueList){ if (SqlType.STRING.getType().equalsIgnoreCase(typeValue.getSqlType())){ sql = sql.replaceFirst("\\?","'"+typeValue.getValue()+"'"); }else if (SqlType.TIMESTAMP.getType().equalsIgnoreCase(typeValue.getSqlType())){ String dateTime = typeValue.getValue().replace(".0",""); sql = sql.replaceFirst("\\?","to_date ('"+dateTime+"' , 'YYYY-MM-DD HH24:MI:SS' )"); }else if (SqlType.INTEGER.getType().equalsIgnoreCase(typeValue.getSqlType()) || SqlType.BIG_DECIMAL.getType().equalsIgnoreCase(typeValue.getSqlType())){ sql = sql.replaceFirst("\\?",typeValue.getValue()); } } System.err.println(sql); return sql; } /** * sql类型 枚举 */ public enum SqlType{ STRING("String"), TIMESTAMP("Timestamp"), INTEGER("Integer"), BIG_DECIMAL("BigDecimal"), ; private String type; public String getType() { return type; } SqlType(String type) { this.type = type; } } /** * 传入sql类型返回(String)格式的字符串 * @param type * @return */ private static String matchString(String type){ String str = "("+type+")"; return str; } /** * 把sql类型封装成枚举,以便做循环比较 * @return */ private static List<String> SqlTypeList(){ if (sqlTypeList == null) { sqlTypeList = new ArrayList<>(); for (SqlType o : SqlType.values()) { sqlTypeList.add(o.type); } } return sqlTypeList; } /** * 值和 sql类型 */ public class TypeValue{ /** * sql类型 **/ private String sqlType; /** * 值 */ private String value; public String getSqlType() { return sqlType; } public void setSqlType(String sqlType) { this.sqlType = sqlType; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } }
根据console打印出来的预编译sql和插入值,获得insert sql语句
最新推荐文章于 2022-03-09 11:17:50 发布