设为首页 加入收藏

TOP

实现通用的PreparedStatement插入记录的方法(一)
2014-11-24 12:02:21 来源: 作者: 【 】 浏览:127
Tags:实现 通用 PreparedStatement 插入 记录 方法
准确的说是实现通用的PreparedStatement通配符对应的赋值方法。在合成PreparedStatement插入语句、找到SQL字段类型与Java类的对应关系之后,就可以实现通用的PreparedStatement插入数据的方法了。
在实现通用的PreparedStatement插入记录的方法过程中,JadePool已经解决好了以下的现实需求:
1、支持不同的数据类型的表单录入,除了流文件类型外,其它任何类型的数据均可以用字符串的形式表达;
2、支持图片、多媒体等所有流文件的录入;
3、支持主键键值的自动生成;
4、支持空值录入;
5、针对不同的数据录入,如有异常,则统一抛出SQLException异常;
6、拆分条件语句,更精准地表达逻辑,优先安排高频度数据类型进行条件判断;
7、提供了灵活方便的日期型数据的录入。
以下是实现PreparedStatement通配符对应的赋值方法的核心代码
[java]
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;
} else if (v != null) {
String _c = ((Class) v.getClass()).getName(); //增加对表单数据的支持,在表单中获取的数据均为String型,固应对其进行转换.
if ((_c.equals("java.lang.String")) && ("".equals(((String) v).trim()))) {
pstmt.setNull(i + 1, sqlType);//continue;
} else {
if (className.equals("java.lang.String")) {
if ((_c.equals("java.lang.String")) && (!"".equals(((String) v).trim()))) {
pstmt.setString(i + 1, (String) v);
}
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇java synchronized 下一篇设计模式详解之抽象工厂模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: