jdbc--------JdbcUtilDao 类
2018-12-14
目标:做成一个比较通用的 sql 操作
import com.ljs.util.JDBCUtil;
类名:JdbcUtilDao
1: 更新操作, 针对任何表,增加,删除,更新操作都可以满足。
知识点: 可变数组, preparedstatement 对象。(?) 占位符。
public int update(String sql, Object ...objects){ //
// 1 获取conn 连接
Connection connection =null;
PreparedStatement pt = null;
try {
connection = JDBCUtil.getConn();
pt = connection.prepareStatement(sql);
for( int i =; i < objects.length; ++i ){
pt.setObject(i+, objects[i]);
}
int len = pt.executeUpdate();
return len;
} catch ( Exception e) {
e.printStackTrace();
return -;
} finally {
// 3 关闭 con
JDBCUtil.close(null, pt, connection);
}
}
2: 通用的查询单条记录, 只返回一条的记录。 这条记录用 javabean 对象封装好。
知识点:泛型,ResultSetMetaData 对象保存结果集的属性结构。 和根据ResultSet 的值
反射, 生成对象,和获取对象的属性并且赋值。
ResultSet --> bean.
public<T> T queryOne(Class<T> clazz, String sql, Object ...Object){
try {
Connection connection = JDBCUtil.getConn();
PreparedStatement pst = connection.prepareStatement(sql);
for( int i=; i<Object.length; ++i ){
pst.setObject(i+, Object[i]);
}
ResultSet resultSet = pst.executeQuery();
// ResultSetMetaData 保存这个结果集的属性结构。
ResultSetMetaData metaData = resultSet.getMetaData();
int len = metaData.getColumnCount();
while( resultSet.next() ){
T bean = clazz.newInstance();
for( int i = ; i<=len; ++i ){
String column_name = metaData.getColumnLabel(i);
Object value = resultSet.getObject(column_name);
/*
* 根据结果集的属性结构 构造 属性结构。
* 反射 。
*/
Field field = clazz.getDeclaredField(column_name);
field.setAccessible(true);
field.set(bean, value);
}
return bean;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3 查询多条记录,返回list容器列表中。
知识点: 和上一样。 ArrayList
public <T> List<T> queryMutil(Class<T> clazz, String sql, Object ...Object){
try {
Connection connection = JDBCUtil.getConn();
PreparedStatement pst = connection.prepareStatement(sql);
List<T> list = new ArrayList<T>();
for( int i=; i<Object.length; ++i ){
pst.setObject(i+, Object[i]);
}
ResultSet set = pst.executeQuery();
ResultSetMetaData metadata = set.getMetaData();
int len = metadata.getColumnCount();
while(set.next()){
T bean = clazz.newInstance();
for (int i = ; i <= len; i++) {
String name = metadata.getColumnLabel(i);
Object object2 = set.getObject(name);
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
field.set(bean, object2);
}
list.add(bean);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
上面的测试代码
package com.ljs.daoTest; import java.util.List; import org.junit.Test; import com.ljs.bean.UserBean;
import com.ljs.dao.JdbcUtilDao; public class JdbcDaoTest { @Test
public void update(){ JdbcUtilDao dao = new JdbcUtilDao();
//String sql = "insert into user(name,password) values(?,?)";
String sql = "update user set name = ? where id = 11";
int len = dao.update(sql, "lijinsheng");
System.out.println(len>?"yes":"no");
} @Test
public void queryOne(){
JdbcUtilDao dao = new JdbcUtilDao();
String sql = "select * from user where name= ?";
UserBean tBean = dao.queryOne(UserBean.class, sql,"lijinsheng");
System.out.println(tBean); } @Test
public void queryMutil(){
JdbcUtilDao dao = new JdbcUtilDao();
List<UserBean> list;
String sql = "select * from user where name= ?";
list = dao.queryMutil(UserBean.class, sql, "lijinsheng");
for( int i=; i<list.size(); ++i ){
System.out.println(list.get(i));
}
} }
public class DaoImp implements Dao{
@Override
public UserBean query(int id) throws SQLException {
String sql = "select * from USER where id = ?";
Connection connection = JDBCUtil.getConn();
UserBean bean = new UserBean();
PreparedStatement preparedStatement = (PreparedStatement)
connection.prepareStatement(sql);
preparedStatement.setInt(1,id);
ResultSet rs = preparedStatement.executeQuery();
while(rs.next()){
bean.setId(rs.getInt(1));
bean.setName(rs.getString(2));
bean.setPassword(rs.getString(3));
bean.setPhone(rs.getString(4));
}
JDBCUtil.close(connection,preparedStatement, rs);
return bean;
}
@Override
public void modify(UserBean userBean) throws SQLException {
String sql = "update user set name=?, password=?, phone=? where id=?";
Connection connection = JDBCUtil.getConn();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,userBean.getName());
preparedStatement.setString(2, userBean.getPassword());
preparedStatement.setString(3,userBean.getPhone());
preparedStatement.setInt(4,userBean.getId());
preparedStatement.executeUpdate();
}
@Override
public void add(UserBean user) throws SQLException {
String sql = "insert into user(id,name,password,phone) values(?,?,?,?)";
Connection connection = JDBCUtil.getConn();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,user.getId());
preparedStatement.setString(2,user.getName());
preparedStatement.setString(3,user.getPhone());
preparedStatement.setString(4,user.getPassword());
preparedStatement.executeUpdate();
}
@Override
public void delete(int id) throws SQLException {
String sql = "delete from user where id=?";
Connection connection = JDBCUtil.getConn();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,id);
preparedStatement.executeUpdate();
}
}
jdbc--------JdbcUtilDao 类的更多相关文章
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- 开源JDBC工具类DbUtils
本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类
7.2 JDBC模板类 7.2.1 概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...
- JDBC第三篇--【事务、元数据、改造JDBC工具类】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 这是我JDBC的第二篇 http://blog.csdn.net/ho ...
- JDBC【事务、元数据、改造JDBC工具类】
1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样[A账户的钱没变,B账户的钱也没变]. 事例说 ...
- JDBC工具类完整版!
package com.aaa.util; import java.sql.*; import java.util.ArrayList; import java.util.HashMap; impor ...
随机推荐
- ZOJ 3827 Information Entropy 水
水 Information Entropy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Informati ...
- JAVA常用代码
一. 判断是否包含某个注解. 1). 声明接口 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented ...
- Eclipse Indigo 3.7.0 安装GIT插件提示 requires 'bundle org.eclipse.team.core(转)
错误提示: Cannot complete the install because one or more required items could not be found.Software bei ...
- Presto 架构和原理简介(转)
Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 ...
- 菜鸟教程之工具使用(八)——EGit禁止自动转换回车换行符
众所周知,Windows和Linux系统的回车换行是不一样的.想要进一步了解它们的可以阅读下面的介绍,不感兴趣的可以直接跳过. 产生背景 关于“回车”(carriage return)和“换行”(li ...
- 【XMPP】Smack源码之初步认识
Smack 概述 Smack是一个用于和XMPP服务器通信的类库,由此可以实现即时通讯和聊天. Smack主要优势 非常简单易用,并且有十分强大的 API.只需三行代码就可以向用户发关文本消息: XM ...
- servlet中web.xml配置详解
Web.xml常用元素 <web-app> 所有部署描述符文件的顶层(根)元素 <display-name></display-name>定义了WEB应用的名字 & ...
- 业界常用的和不常用cad快捷键
AutoCAD 是目前世界各国工程设计人员的首选设计软件,简便易学.精确无误是AutoCAD成功的两个重要原因.AutoCAD提供的命令有很多,绘图时最常用的命令只有其中的百分之二十. 在CAD软件操 ...
- Java知多少(46)try和catch的使用
尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...
- java多线程系列(四)---ReentrantLock的使用
Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...