反射实现增删改查(DAO层)——修改数据
先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
*
* 修改数据
*
*/
@Override
public void updateObject(Object object, String tableName) {
StringBuilder sql = new StringBuilder("UPDATE " + tableName + " SET ");
Connection connection = null;
PreparedStatement preparedStatement = null;
// 用于存放传入的对象的参数,默认将id值(主键)的key设为0,方便条件设置
Map<Integer, Object> fieldsValues = new HashMap<Integer, Object>();
try {
for (int i = 0; i < fields.length; i++) {
fields[i].setAccessible(true);
if (i == 0) {
fieldsValues.put(fields.length - 1, fields[i].get(object));
continue;
}
sql.append(fields[i].getName());
sql.append("=?");
fieldsValues.put(i - 1, fields[i].get(object));
if (i < (fields.length - 1))
sql.append(", ");
if (i == (fields.length - 1)) {
sql.append(" WHERE ");
sql.append(fields[0].getName());
sql.append("=?");
}
}
connection = DBConnection.getConnection();
preparedStatement = connection.prepareStatement(sql.toString());
Class<?> fieldClass = null;
for (int i = 1; i <= fieldsValues.size(); i++) {
/**
* 获取存入map中对象的参数的类类型,根据类类型选择preparedStatement的set方法
*/
fieldClass = fieldsValues.get(i - 1).getClass();
// 如果类类型为String.class,则执行setString
if (fieldClass.equals(String.class)) {
preparedStatement.setString(i,
(String) fieldsValues.get(i - 1));
}
// 如果类类型为Float.class,则执行setString
if (fieldClass.equals(Float.class)) {
preparedStatement.setFloat(i,
(Float) fieldsValues.get(i - 1));
}
// 如果类类型为Integer.class,则执行setString
if (fieldClass.equals(Integer.class)) {
preparedStatement.setInt(i,
(Integer) fieldsValues.get(i - 1));
}
// 如果类类型为Timestamp.class,则执行setString
if (fieldClass.equals(Timestamp.class)) {
preparedStatement.setTimestamp(i, new Timestamp(
((Date) fieldsValues.get(i - 1)).getTime()));
}
}
// 执行sql语句,返回更新参数
int columnsCount = preparedStatement.executeUpdate();
System.out.println("有" + columnsCount + "条数据被更新!");
} catch (SQLException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} finally {
DBConnection.close(connection, preparedStatement, null);
}
}
基本流程:(这张表结合源码备注理解应该问题不大)如果看不清楚,复制图片地址在新窗口中查看

反射实现增删改查(DAO层)——修改数据的更多相关文章
- struts2增删改查---layer---iframe层
在这里写一下struts2中的简单的增删改查 struts.xml中的配置 <?xml version="1.0" encoding="UTF-8" ?& ...
- struts2增删改查---layer---iframe层---通配符---国际化
在前一篇文章的基础上,修改一部分即可(在此只是简单介绍) struts.xml页面 在原来的基础之上 action的name="*_*" class="包名.{1}&q ...
- 用C#实现对MSSqlServer数据库的增删改查---DAL层
说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...
- 反射实现数据库增删改查DAO及DAOImpl源代码(一)
这是DAO层,第一次尝试,如有bug希望能即使反馈,我们共同进步.具体的用法和实现原理我会在前面几篇博客中补充更新.配置文件及项目目录结构会在下一篇中贴出! package com.javasm.su ...
- 反射实现增删改查(DAO层)——查询数据
先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 数据查询 * */ @Override public List<?> queryObject(List<Map& ...
- 反射实现增删改查(DAO层)——删除数据
先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 删除数据 */ @Override public void deleteObject(List<Map<String, ...
- 反射实现增删改查(DAO层)——插入数据
先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * 插入数据 */ @Override public void addObject(Object object, String table ...
- 反射实现数据库增删改查DAO及DAOImpl源代码(二)
配置文件源码 配置文件主要用于配置数据库对象(javaBean),配置表名,配置查询条件,配置删除条件 文件名称:objectConfigPath.properties 这个配置文件里面配置的是另外一 ...
随机推荐
- ajax页面中的前进与后台的实现
具体效果参考:http://www.zhangxinxu.com/study/201306/ajax-page-html5-history-api.html? //以下是自己的部分理解<!DOC ...
- SmartGit(试用期30后),个人继续使用的方法。
在我们做项目的过程中,我们会用到SmartGit这个软件来将本地的MAVEN项目push到国内的码云(https://git.oschina.net)或者是国外的github网站进行项目的管理,这个时 ...
- 2018.5.28 PSOC第一枪:基于cypress的蓝牙开发
Cypress-BLE 开发套件可以快速开发 物联网电子产品. PSOC编程特点: A 拖放各PSoC 组件到工作区中,以设计原理图B 完成各组件之间的布线,并配置GPIOC 使用所包含的组件API ...
- MySQL 和 InnoDB
发现一篇总结的很不错的文章,转一下 (原文作者:Draveness 原文链接:https://draveness.me/mysql-innodb) 作为一名开发人员,在日常的工作中会难以避免地接触 ...
- vmware station中 UDEV 无法获取共享存储磁盘的UUID,症状: scsi_id -g -u -d /dev/sdb 无返回结果。
1.确认在所有RAC节点上已经安装了必要的UDEV包 [root@11gnode1 ~]# rpm -qa|grep udevsystem-config-printer-udev-1.1.16-25. ...
- Sublime Text2中Evernote 插件的使用
Sublime Text2是个强大的编辑器, 有好多插件供我们使用, 其中有个插件SublimeEvernote, 可以把代码发送到Evernote里. 但是没找见使用说明, 今天看了下Sublime ...
- Centos6.5命令行快捷键
ctrl+a打开一个新的终端 ctrl+l 清除屏幕内容 ctrl+a 切换到命令行开始ctrl+e 切换到命令行末尾ctrl+u 剪切光标之前的内容ctrl+k 剪切光标之后的内容 Ctrl+-&g ...
- 最长递增子序列(LIS)
最长递增子序列(Longest Increasing Subsequence) ,我们简记为 LIS. 题:求一个一维数组arr[i]中的最长递增子序列的长度,如在序列1,-1,2,-3,4,-5,6 ...
- poj 1658 Eva's Problem(水题)
一.Description Eva的家庭作业里有很多数列填空练习.填空练习的要求是:已知数列的前四项,填出第五项.因为已经知道这些数列只可能是等差或等比数列,她决定写一个程序来完成这些练习. Inpu ...
- Ubuntu 切换root用户是时出现su Authentication failure
su root 时出现错误su Authentication failure 原因是没有给root用户设置密码 sudo passwd root