持久化,数据库操作部分,借鉴osc部分代码,使用dbutils组件

public abstract class DataAccess

{

private static final Logger log = LoggerFactory.getLogger(DataAccess.class);

private Connection conn;

/**

* @param conn 数据库连接

*/

protected DataAccess(Connection conn)

{

this.conn = conn;

}

/**

* 插入数据

*

* @param sql

* @param generatedKeysConverter 主键映射

* @param params

* @return 主键

* @throws DataAccessException

*/

protected  T insert(String sql, ResultConverter generatedKeysConverter, Object... params) throws DataAccessException

{

try

{

PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

setParameters(pstmt, params);

executeUpdate(pstmt);

ResultSet rs = pstmt.getGeneratedKeys();

nextResult(rs);

return convertResult(rs, generatedKeysConverter);

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 更新数据

*

* @param sql

* @param params

* @return 影响行数

* @throws DataAccessException

*/

protected int update(String sql, Object... params) throws DataAccessException

{

return executeUpdate(getPreparedStatement(sql, params));

}

/**

* 查询单个结果

*

* @param

* @param sql

* @param converter

* @param params

* @return

*/

protected  T queryForObject(String sql, ResultConverter converter, Object... params)

{

ResultSet rs = executeQuery(sql, params);

if (nextResult(rs))

{

return convertResult(rs, converter);

}

else

{

return null;

}

}

/**

* 查询结果列表

*

* @param

* @param sql

* @param converter

* @param params

* @return

*/

protected  List queryForList(String sql, ResultConverter converter, Object... params)

{

ResultSet rs = executeQuery(sql, params);

List list = new ArrayList();

while (nextResult(rs))

{

list.add(convertResult(rs, converter));

}

return list;

}

/**

* @param sql SQL语句

* @return 预编译声明

*/

private PreparedStatement getPreparedStatement(String sql, Object... params) throws DataAccessException

{

PreparedStatement pstmt = getPreparedStatement(sql);

setParameters(pstmt, params);

return pstmt;

}

/**

* @param sql SQL语句

* @return 预编译声明

*/

private PreparedStatement getPreparedStatement(String sql) throws DataAccessException

{

try

{

return conn.prepareStatement(sql);

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 为预编译声明传入参数

*

* @param pstmt 预编译声明

* @param params 参数

* @throws DataAccessException

*/

private void setParameters(PreparedStatement pstmt, Object... params) throws DataAccessException

{

try

{

for (int i = 0; i

{

pstmt.setObject(i + 1, params[i]);

}

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 执行更新操作

*

* @param pstmt

* @return 影响行数

* @throws DataAccessException

*/

private int executeUpdate(PreparedStatement pstmt) throws DataAccessException

{

try

{

return pstmt.executeUpdate();

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 执行查询操作

*

* @param pstmt 预编译声明

* @return 结果集

* @throws DataAccessException

*/

private ResultSet executeQuery(PreparedStatement pstmt) throws DataAccessException

{

try

{

return pstmt.executeQuery();

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 执行查询操作

*

* @param sql SQL语句

* @param params 参数

* @return 结果集

* @throws DataAccessException

*/

private ResultSet executeQuery(String sql, Object... params) throws DataAccessException

{

return executeQuery(getPreparedStatement(sql, params));

}

/**

* 移动到下一行记录

*

* @param rs 结果集

* @return 是否有下一行记录

* @throws DataAccessException

*/

private boolean nextResult(ResultSet rs) throws DataAccessException

{

try

{

return rs.next();

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

/**

* 映射

*

* @param rs 结果集

* @return 映射结果

* @throws DataAccessException

*/

private  T convertResult(ResultSet rs, ResultConverter converter) throws DataAccessException

{

try

{

return converter.convert(rs);

}

catch (SQLException e)

{

e.printStackTrace();

log.error(e.getMessage(), e);

throw new DataAccessException(e);

}

}

}

其余DBManager,DBUtils,参考请OSC源码

java 界面框架源码_轻量级java web实践-8(框架源码-6)相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java留言板功能齐全源码_各类Java微信开发框架源码对比(建议收藏)

    如果你是一名Java程序猿? 如果你刚接触微信开发? 如果你想要快速开发一款微信公众号/小程序商城? 如果你在寻找一款合适的微信开发框架? 一张图告诉你如何选择! 如果你暂时用不到, 那么收藏备用吧! ...

  3. java web开源项目源码_适合Java新手的开源项目集合——在 GitHub 学编程

    作者:HelloGitHub-老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是瘦 ...

  4. java后端做教育视频网站源码_【Java并发面试点】看这一篇应该是够了

    [Java并发面试点]看这一篇应该是够了 Java并发编程是Java后端.大数据开发面试必问项目之一,求职者务必掌握! Java并发面试点List 并发概念须知:进程与线程.同步与异步.并发与并行.阻 ...

  5. 天天酷跑php源码_使用Java实现天天酷跑(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...

  6. 相册java源码_电子相册java源码

    电子相册java源码 import java.awt.*; import java.awt.FlowLayout; import java.awt.event.*; import javax.swin ...

  7. Java线程池状态判断源码_深入浅出Java线程池:源码篇

    前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...

  8. java打字小游戏源码_求JAVA编写打字游戏源代码!

    展开全部 package chen; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; ...

  9. java中字节码_聊聊Java的字节码

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 巴山楚水凄凉地,二十三年弃置身. 怀旧空吟闻笛赋,到乡翻似烂柯人. 沉舟侧畔千帆过,病树前头万 ...

最新文章

  1. 便利的开发工具 CppUnit 快速使用指南
  2. swift4.0 try 的强大
  3. Java垃圾收集器:G1GC何时将CMS强制退出?
  4. 力扣53. 最大子数组和(JavaScript)
  5. Dummies Guide to Trains in Japan
  6. WebRTC入门知识
  7. NOSQL数据库习题
  8. 易基因|作物育种:MdMTA介导的RNA甲基化(m6A修饰)在苹果抗逆品种选育中的作用研究
  9. 解决虚拟机启动失败或进入应急模式的问题
  10. matlab中输入数学符号,matlab 数学符号输入
  11. python立方尾不变
  12. 数字图像处理(3) — 基于白平衡的人脸美白算法
  13. Linux中source filename .(点)filename ./filename sh filename的区别
  14. Linux系统checkra1n装错插件,CheckRa1n越狱常见问题汇总 CheckRa1n越狱问题解决方法
  15. html5学习记录(三)
  16. 武汉理工校训计算机工程学,"厚德博学,追求卓越"武汉理工大学校训
  17. (Matlab)遗传算法优化的BP神经网络实现回归预测
  18. 《别告诉我你懂PPT》读书笔记
  19. cmake创建codeblocks项目
  20. 3|5的值是什么意思,3/5的意义是多少?

热门文章

  1. php表达式求值,PHP实现基于栈的后缀表达式求值功能
  2. mybatis------通过mapper接口加载映射文件(六)
  3. Java的jdk在win10安装配置环境变量
  4. 排列和组合、以及数列(五)
  5. c语言程序结果 856400,《C语言程序设计教程》习题参考解析1.doc
  6. c++ 构造函数数组_从 JS 数组操作到 V8 array.js
  7. phpmyadmin mysql float 长度_mysql – phpMyAdmin – “请输入有效长度”
  8. [专栏精选]TextMeshPro插件
  9. [洪流学堂]Hololens开发入门篇2之Hello World
  10. how many fibs java_How many Fibs?(java)