先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
* 插入数据
*/
@Override
public void addObject(Object object, String tableName) {
StringBuilder sql = new StringBuilder("INSERT " + tableName
+ " VALUES(");
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);
fieldsValues.put(i, fields[i].get(object));
sql.append("?");
if (i < (fields.length - 1))
sql.append(", "); }
sql.append(")");
connection = DBConnection.getConnection(); preparedStatement = connection.prepareStatement(sql.toString());
Class<?> fieldClass = null;
for (int i = 1; i <= fieldsValues.size(); i++) {
/**
* 获取存入map中对象的参数的类类型,根据类类型选择preparedStatement的set方法
*/
if (fieldsValues.get(i - 1) != null) {
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()));
} } else {
preparedStatement.setObject(i, null);
} }
// 执行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) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBConnection.close(connection, preparedStatement, null);
} }

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

最新文章

  1. ContextFlyout 在10586或10240的使用
  2. redmine常见问题
  3. js不间断平滑地自动向上滚动
  4. 通用FASTREPORT打印模块及接口方法
  5. 一个CS出身的基本素养
  6. Topo软件
  7. [NOIP2001提高组]CODEVS1014 Car的旅行路线(最短路)
  8. devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
  9. javascript编码规范总结
  10. 201521123085 《Java程序设计》 第2周学习总结
  11. Java NIO 之 Buffer
  12. python精进之路1---基础数据类型
  13. 3--TestNG多线程
  14. Opaque data type--不透明类型
  15. git push declined due to email privacy restrictions 解决方法
  16. shell 用环境变量的值修改properties文件
  17. java中常见异常汇总(根据自己遇到的异常不定时更新)
  18. Junit使用的超简单介绍
  19. Django的models方法返回值异常,待解决
  20. Intel微处理结构.docx

热门文章

  1. JAVA发送手机短信
  2. jquery中bind,live,delegate,on的区别
  3. QTableWidget设计原则
  4. Mex混合编程专题一:Mex环境搭建
  5. C++中函数模版和普通函数的区别
  6. python密钥登录主机
  7. ACM学习历程—HDU 5451 Best Solver(Fibonacci数列 &amp;&amp; 快速幂)(2015沈阳网赛1002题)
  8. CTSC2017 游记
  9. mysql绿色安装
  10. Poj1163 The Triangle(动态规划求最大权值的路径)