先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
*
* 修改数据
*
*/
@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);
} }

基本流程:(这张表结合源码备注理解应该问题不大)如果看不清楚,复制图片地址在新窗口中查看

最新文章

  1. js 表格实现
  2. java面向对象编程——第二章 java基础语法
  3. HDU 4893 线段树
  4. centos中MySQL,VmTools安装,使用及异常
  5. 关于js中伪数组
  6. 远程开户系统开放API接口
  7. 手动的写一个structs
  8. vim编辑器介绍及其常用命令
  9. 深入学习Redis(3):主从复制
  10. python3-基础5
  11. jmeter安装与环境变量配置
  12. AtCoder Beginner Contest 045 B - 3人でカードゲームイージー / Card Game for Three (ABC Edit)
  13. 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别
  14. Linux——进程管理简单学习笔记(二)
  15. 阿超的烦恼 javaScript篇
  16. mac 类似Xshell
  17. matlab下利用K-Means进行图像分类
  18. Android 4.4 (KitKat) SMS Apis Change——Android 4.4的一个重大变化
  19. 第一篇&amp;nbsp;UCOS介绍
  20. ActiveMQ部署步骤和后台管理网站Service Unavailable问题解决笔记

热门文章

  1. 分享知识-快乐自己:springboot之thymeleaf (1):简单的thymeleaf例子
  2. jQuery对象和DOM对象的相互转化实现代码
  3. JavaUtil_01_MD5加密
  4. javascript-JQuery样式篇(一)
  5. HDU 6231 (K-th Number)
  6. IO - 同步,异步,阻塞,非阻塞 (转帖:http://blog.csdn.net/historyasamirror/article/details/5778378)
  7. 解决编译warning:warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
  8. ACM学习历程—UESTC 1226 Huatuo&#39;s Medicine(数学)(2015CCPC L)
  9. ACM学习历程—Rotate(HDU 2014 Anshan网赛)(几何)
  10. IDEA发布运行web项目(曾经遇到的项目启动报404)