java 界面框架源码_轻量级java web实践-8(框架源码-6)
持久化,数据库操作部分,借鉴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)相关推荐
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- java留言板功能齐全源码_各类Java微信开发框架源码对比(建议收藏)
如果你是一名Java程序猿? 如果你刚接触微信开发? 如果你想要快速开发一款微信公众号/小程序商城? 如果你在寻找一款合适的微信开发框架? 一张图告诉你如何选择! 如果你暂时用不到, 那么收藏备用吧! ...
- java web开源项目源码_适合Java新手的开源项目集合——在 GitHub 学编程
作者:HelloGitHub-老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是瘦 ...
- java后端做教育视频网站源码_【Java并发面试点】看这一篇应该是够了
[Java并发面试点]看这一篇应该是够了 Java并发编程是Java后端.大数据开发面试必问项目之一,求职者务必掌握! Java并发面试点List 并发概念须知:进程与线程.同步与异步.并发与并行.阻 ...
- 天天酷跑php源码_使用Java实现天天酷跑(附源码)
首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...
- 相册java源码_电子相册java源码
电子相册java源码 import java.awt.*; import java.awt.FlowLayout; import java.awt.event.*; import javax.swin ...
- Java线程池状态判断源码_深入浅出Java线程池:源码篇
前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用.(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适).本文则深入线程池的源码,主要是介绍Thr ...
- java打字小游戏源码_求JAVA编写打字游戏源代码!
展开全部 package chen; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; ...
- java中字节码_聊聊Java的字节码
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 巴山楚水凄凉地,二十三年弃置身. 怀旧空吟闻笛赋,到乡翻似烂柯人. 沉舟侧畔千帆过,病树前头万 ...
最新文章
- 便利的开发工具 CppUnit 快速使用指南
- swift4.0 try 的强大
- Java垃圾收集器:G1GC何时将CMS强制退出?
- 力扣53. 最大子数组和(JavaScript)
- Dummies Guide to Trains in Japan
- WebRTC入门知识
- NOSQL数据库习题
- 易基因|作物育种:MdMTA介导的RNA甲基化(m6A修饰)在苹果抗逆品种选育中的作用研究
- 解决虚拟机启动失败或进入应急模式的问题
- matlab中输入数学符号,matlab 数学符号输入
- python立方尾不变
- 数字图像处理(3) — 基于白平衡的人脸美白算法
- Linux中source filename .(点)filename ./filename sh filename的区别
- Linux系统checkra1n装错插件,CheckRa1n越狱常见问题汇总 CheckRa1n越狱问题解决方法
- html5学习记录(三)
- 武汉理工校训计算机工程学,"厚德博学,追求卓越"武汉理工大学校训
- (Matlab)遗传算法优化的BP神经网络实现回归预测
- 《别告诉我你懂PPT》读书笔记
- cmake创建codeblocks项目
- 3|5的值是什么意思,3/5的意义是多少?
热门文章
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
- mybatis------通过mapper接口加载映射文件(六)
- Java的jdk在win10安装配置环境变量
- 排列和组合、以及数列(五)
- c语言程序结果 856400,《C语言程序设计教程》习题参考解析1.doc
- c++ 构造函数数组_从 JS 数组操作到 V8 array.js
- phpmyadmin mysql float 长度_mysql – phpMyAdmin – “请输入有效长度”
- [专栏精选]TextMeshPro插件
- [洪流学堂]Hololens开发入门篇2之Hello World
- how many fibs java_How many Fibs?(java)