日期:2014-05-16 浏览次数:20651 次
准确的说是实现通用的PreparedStatement通配符对应的赋值方法。在合成PreparedStatement插入语句、找到SQL字段类型与Java类的对应关系之后,就可以实现通用的PreparedStatement插入数据的方法了。
在实现通用的PreparedStatement插入记录的方法过程中,JadePool已经解决好了以下的现实需求:
1、支持不同的数据类型的表单录入,除了流文件类型外,其它任何类型的数据均可以用字符串的形式表达; 6、拆分条件语句,更精准地表达逻辑,优先安排高频度数据类型进行条件判断;
7、提供了灵活方便的日期型数据的录入。
以下是实现PreparedStatement通配符对应的赋值方法的核心代码
pstmt = con.prepareStatement(preparedStatementInsert);//多记录共享prepareStatement插入语句 long firstStringKey = (new java.util.Date()).getTime(); //为了提高运算效率,规定判断条件优先顺序:常用标准条件精确匹配、标准条件精确匹配、非标准条件精确匹配、非标准条件概略匹配、非标准条件概略小写匹配 for (Map record : listRecord) { if (autoInsertKey) { if (tableKeys.length > 0) { Field keyF = db.getField(tableName, tableKeys[0]); if ("java.lang.Long".equals(keyF.getTypeClassName())) {//时间+4位整数 record.put(tableKeys[0], db.getTable(tableName).makeLongKeyValue()); } else if ("java.lang.String".equals(keyF.getTypeClassName())) { if (Integer.parseInt(keyF.getSize()) > 13) { record.put(tableKeys[0], "" + (firstStringKey + 1));//自动插入字符型主键值//if (className.equals("java.lang.String") && Integer.parseInt(f.getSize()) > 13) } else { return num; } } else { maxFieldValue = db.getTable(tableName).makeObjectKeyValue(keyF, maxFieldValue); record.put(tableKeys[0], maxFieldValue);//自动插入数值型主键值 } } else { Field keyF = db.getField(tableName, tableFields[0]); if ("java.lang.Long".equals(keyF.getTypeClassName())) {//时间+4位整数 record.put(tableFields[0], db.getTable(tableName).makeLongKeyValue()); } else if ("java.lang.String".equals(keyF.getTypeClassName())) { if (Integer.parseInt(keyF.getSize()) > 13) { record.put(tableFields[0], "" + (firstStringKey + 1));//自动插入字符型主键值//if (className.equals("java.lang.String") && Integer.parseInt(f.getSize()) > 13) } else { return num; } } else { maxFieldValue = db.getTable(tableName).makeObjectKeyValue(keyF, maxFieldValue); record.put(tableFields[0], maxFieldValue);//自动插入数值型主键值 } } } for (int i = 0; i < fields.length; i++) { Field f = db.getField(tableName, fields[i].toString()); String className = f.getTypeClassName(); int sqlType = f.getSqlType(); Object v = record.get(fields[i].toString()); if (v == null) { pstmt.setNull(i + 1, sqlType);//continue; } e