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
相关文章:
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
建站之星安装模板失败:服务器环境不兼容?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何快速搭建虚拟主机网站?新手必看指南
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
建站之星代理如何获取技术支持?
公司门户网站制作流程,华为官网怎么做?
在线制作视频网站免费,都有哪些好的动漫网站?
制作网站的软件免费下载,免费制作app哪个平台好?
装修招标网站设计制作流程,装修招标流程?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何快速重置建站主机并恢复默认配置?
建站之星价格显示格式升级,你的预算足够吗?
常州自助建站费用包含哪些项目?
b2c电商网站制作流程,b2c水平综合的电商平台?
如何在腾讯云服务器上快速搭建个人网站?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
建站之星安装需要哪些步骤及注意事项?
,sp开头的版面叫什么?
如何在建站之星绑定自定义域名?
如何快速查询域名建站关键信息?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
建站之星导航菜单设置与功能模块配置全攻略
如何用景安虚拟主机手机版绑定域名建站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
三星网站视频制作教程下载,三星w23网页如何全屏?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
完全自定义免费建站平台:主题模板在线生成一站式服务
建站之星后台管理系统如何操作?
简单实现Android验证码
智能起名网站制作软件有哪些,制作logo的软件?
如何彻底卸载建站之星软件?
如何快速搭建高效可靠的建站解决方案?
如何在万网主机上快速搭建网站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
制作网站的基本流程,设计网站的软件是什么?
网站制作话术技巧,网站推广做的好怎么话术?
定制建站流程解析:需求评估与SEO优化功能开发指南
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
深圳网站制作的公司有哪些,dido官方网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何快速查询网址的建站时间与历史轨迹?
如何在阿里云高效完成企业建站全流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。