设为首页 加入收藏

TOP

实现通用的PreparedStatement更新记录的方法(二)
2014-11-24 12:04:54 】 浏览:1769
Tags:实现 通用 PreparedStatement 新记录 方法
e 是一个表名
* @param listRecord 是具有相同结构的一组记录
* @param isUpdateKey 是否更新主键
* @param whereStr
* 是操作条件,插入时不起作用,更新时,若where==null||"".equals(where),则自动根据记录自身主键字段的键值对组合where条件语句
* 是从LinkedHashMap参数中获取的值
* @throws SQLException
*/
private int _preparedStatementUpdate(String tableName, List listRecord, boolean isUpdateKey, String whereStr) throws SQLException {
int num = 0;
if (listRecord == null || listRecord.isEmpty()) {
return num;
}
Map _m = new LinkedHashMap(listRecord.get(0));//获取一条记录,作为过滤、分组依据
String[] tableFields = db.getFields(tableName);//表中的字段
String[] tableKeys = db.getKeys(tableName);//表中的主键
Object[] recordFields = (_m.keySet()).toArray(); //获取记录里的字段名的集合
for (int i = 0; i < recordFields.length; i++) {
if (!tool.isInFields(tableFields, recordFields[i].toString())) {
_m.remove(recordFields[i].toString());//移除无效字段, 查看记录中的字段在表中是否存在,如果不存在,则移除到
}
}
Object[] k0 = (_m.keySet()).toArray(); //过滤后的有效字段
Map key_m = new LinkedHashMap();//记录里的主键
if (!isUpdateKey) {
for (int i = 0; i < k0.length; i++) {
if (tool.isInFields(tableKeys, k0[i].toString())) {//记录中是否有主键
key_m.put(k0[i].toString(), _m.remove(k0[i].toString()));//将记录中的主键移到key_m中;保证不对主键更新
}
}
}
Object[] fields = (_m.keySet()).toArray(); //记录中不包含主键的有效字段;再次过滤掉主键字段的结果
Object[] keys = (key_m.keySet()).toArray(); //记录中包含的主键
if (isUpdateKey) {
if (keys.length == 0 || keys.length != tableKeys.length) {
return num;
}
}
String[] kss = new String[fields.length]; //保存"键名= "
for (int i = 0; i < fields.length; i++) {
kss[i] = fields[i].toString() + "= ";
}
String n_v = tool.arryToString(kss, ",");
String preparedStatementUpdate = "update " + tableName + " set " + n_v + " ";
//System.out.println(preparedStatementUpdate);
PreparedStatement pstmt = null;
try {
if (whereStr != null) {
pstmt = con.prepareStatement(preparedStatementUpdate + whereStr);//如果whereStr!=null,从这里执行PrepareStatement更新
}
for (Map record : listRecord) {
if (whereStr == null) {
String _w = "";
if (keys.length > 0) {
Field f = db.getField(tableName, keys[0].toString());
Object _o = record.get(keys[0].toString());
String _s = "";
if (f.getTypeClassName().equals("java.lang.String")) {
_s = keys[0].toString() + " like '" + _o.toString() + "'";
} else {
_s = keys[0].toString() + " = " + _o.toString();
}
if (keys.length > 1) {
for (int i = 1; i < keys.length; i++) {
f = db.getField(tableName, keys[i].toString());
_o = record.get(keys[i].toString());
if (f.getTypeClassName().equals("java.lang.String")) {
_s = _s + " and " + keys[i].toString() + " like '" + _o.toString() + "'";
} else {
_s = _s + " and " + keys[i].toString() + " = " + _o.toString();
}
}
}
_w = " where " + _s;
}
//System.out.println(prepare
首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇黑马程序员_常见java问题小计 下一篇JSF,第二代Java页面技术

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目