java 使用策略模式操作JDBC数据库
发布时间 - 2026-01-11 02:51:46 点击率:次java 使用策略模式操作JDBC数据库

1:构造一个操作数据库的工具类,可以获得连接和释放连接
public class DBUtil {
private static Connection conn = null;
static { //静态初始块
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "064319"); //初始化获取连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 释放连接
* @param rs
* @param psmt
* @param conn
* @throws SQLException
*/
public static void closeAll(ResultSet rs, PreparedStatement psmt, Connection conn) throws SQLException {
if(rs != null) {
rs.close();
}
if(psmt != null) {
psmt.close();
}
if(conn != null) {
conn.close();
}
}
/**
* 获取连接
* @return
*/
public static Connection getConnection() {
return conn;
}
/**
* 根据表的名字来获得表的列信息
* @param tableName
*/
public static void getTableColumnInfoByTableName(String tableName) {
Connection conn = getConnection();
ResultSet rs = null;
PreparedStatement psmt = null;
String sql = "select * from " + tableName;
try {
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
ResultSetMetaData resultSetMetaData = rs.getMetaData();
for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) {
System.out.println(resultSetMetaData.getColumnName(i));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
closeAll(rs, psmt, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 根据表的名字来获得表的信息
* @param tableName
*/
public static void getTableInfoByTableName(String tableName) {
Connection conn = getConnection();
PreparedStatement psmt = null;
ResultSet rs = null;
String sql = "select * from " + tableName;
try {
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
while(rs.next()) {
ResultSetMetaData resultSetMetaData = rs.getMetaData();
for(int i = 1; i<= resultSetMetaData.getColumnCount(); i++) {
if(i < resultSetMetaData.getColumnCount()) {
System.out.print(rs.getObject(resultSetMetaData.getColumnName(i)) + ", ");
} else {
System.out.print(rs.getObject(resultSetMetaData.getColumnName(i)));
}
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
closeAll(rs, psmt, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2:构造一个操作数据库的BaseDao类
public class BaseDao {
/**
* 根据一些参数来保存相应的对象
* @param sql 要执行的sql语句
* @param params 为sql语句中相应的参数赋值
* @return
*/
protected boolean saveOrUpdate(String sql, Object[] params) {
Connection conn = null;
PreparedStatement psmt = null;
boolean flag = false;
conn = DBUtil.getConnection();
if(conn != null) {
try {
psmt = conn.prepareStatement(sql);
for(int i = 1; i <= params.length; i++) {
psmt.setObject(i, params[i-1]);
}
if(psmt.executeUpdate() > 0) {
flag = true;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
DBUtil.closeAll(null, psmt, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return flag;
}
/**
* 根据一定的参数获得某个具体的对象
* @param sql 要执行的sql语句
* @param params 为sql语句中相应的参数赋值
* @return
*/
public Object queryForObject(String sql, Object[] params, RowMapForObject rowMapForObject) {
Connection conn = null;
PreparedStatement psmt = null;
conn = DBUtil.getConnection();
Object obj = null;
ResultSet rs = null;
if(conn != null) {
try {
psmt = conn.prepareStatement(sql);
if(params != null && params.length > 0) {
for(int i = 1; i <= params.length; i++) {
psmt.setObject(i, params[i - 1]);
}
}
rs = psmt.executeQuery();
obj = rowMapForObject.rowMapForObject(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
DBUtil.closeAll(null, psmt, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return obj;
}
/**
* 根据相应的参数获得查询的结果集
* @param sql
* @param params
* @return
*/
public List queryForList(String sql, Object[] params, RowMapForList rowMapForList) {
Connection conn = null;
PreparedStatement psmt = null;
conn = DBUtil.getConnection();
List list = null;
ResultSet rs = null;
if(conn != null) {
try {
psmt = conn.prepareStatement(sql);
if(params != null && params.length > 0) {
for(int i = 1; i <= params.length; i++) {
psmt.setObject(i, params[i - 1]);
}
}
rs = psmt.executeQuery(sql);
list = new ArrayList();
list = rowMapForList.rowMapForList(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
DBUtil.closeAll(null, psmt, conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}
3:新建一个StudentDao类,该类继承自BaseDao,实现对Student的管理
public class StudentDao extends BaseDao {
/**
* 保存一个Student的信息
*/
public boolean saveStudent(Student student) {
String sql = "insert into t_student(name, age) values(?, ?)";
Object[] params = new Object[]{student.getName(), student.getAge()};
return super.saveOrUpdate(sql, params);
}
/**
* 根据id获得一个Student的信息
* @param id
* @return
*/
public Student getStudentById(long id) {
String sql = "select * from t_student where id=?";
Object[] params = new Object[]{id};
return (Student)super.queryForObject(sql, params, new RowMapForObject() {
public Object rowMapForObject(ResultSet rs) {
Student student = null;
try {
if(rs != null && rs.next()) {
student = new Student();
student.setAge(rs.getInt(Student.AGE));
student.setId(rs.getLong(Student.ID));
student.setName(rs.getString(Student.NAME));
}
} catch (SQLException e) {
e.printStackTrace();
}
return student;
}
});
}
/**
* 获得所有Student的信息
* @return
*/
public List getStudentAll() {
String sql = "select * from t_student";
List list = super.queryForList(sql, null, new RowMapForList() {
@Override
public List rowMapForList(ResultSet rs) {
List list = null;
try {
if(rs != null) {
list = new ArrayList();
while(rs.next()) {
Student student = new Student();
student.setId(rs.getLong("id"));
student.setAge(rs.getInt("age"));
student.setName(rs.getString("name"));
list.add(student);
}
}
} catch(SQLException e) {
e.printStackTrace();
}
return list;
}
});
return list;
}
}
如有疑问请留言或者到本站社区交流讨论,大家共同进步,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 使用策略模式操作JDBC数据库
# 操作数据库
# Java使用策略模式解决商场促销商品问题示例
# java实现策略模式使用示例
# Java使用策略模式实现聚石塔接口调用的问题
# 如有
# 希望能
# 谢谢大家
# 可以获得
# 新建一个
# 共同进步
# 疑问请
# PreparedStatement
# closeAll
# ResultSet
# tableName
# return
# close
# void
# param
# SQLException
# printStackTrace
# throws
# psmt
# rs
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
教你用AI润色文章,让你的文字表达更专业
如何自定义建站之星网站的导航菜单样式?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
如何用美橙互联一键搭建多站合一网站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何在万网开始建站?分步指南解析
深入理解Android中的xmlns:tools属性
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Python文本处理实践_日志清洗解析【指导】
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
node.js报错:Cannot find module 'ejs'的解决办法
如何为不同团队 ID 动态生成多个“认领值班”按钮
济南网站建设制作公司,室内设计网站一般都有哪些功能?
个人网站制作流程图片大全,个人网站如何注销?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
什么是javascript作用域_全局和局部作用域有什么区别?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
,怎么在广州志愿者网站注册?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
如何基于云服务器快速搭建个人网站?
如何快速上传建站程序避免常见错误?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
黑客如何通过漏洞一步步攻陷网站服务器?
如何实现建站之星域名转发设置?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel如何生成URL和重定向?(路由助手函数)
简单实现Android验证码
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
iOS发送验证码倒计时应用
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何在新浪SAE免费搭建个人博客?
网易LOFTER官网链接 老福特网页版登录地址
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
香港服务器WordPress建站指南:SEO优化与高效部署策略
网站建设要注意的标准 促进网站用户好感度!
如何在云主机上快速搭建多站点网站?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
千库网官网入口推荐 千库网设计创意平台入口
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何在IIS中新建站点并解决端口绑定冲突?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
php结合redis实现高并发下的抢购、秒杀功能的实例
微信小程序 配置文件详细介绍
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点

