DBUtils工具类
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; public class DBUtils {
private static String driverName;
private static String url;
private static String username;
private static String password; static{
try {
//读取配置文件的信息
Properties properties = new Properties();
//从资源路径中去获取配置属性
InputStream is = DBUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
try {
properties.load(is);
driverName = properties.getProperty("driverName");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
//1. 加载驱动
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} public static Connection getConnection(){
//获取连接对象
Connection connection = null;
try {
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
} public static void closeAll(AutoCloseable...cs){
if(cs != null){ //如果只传了一个null过来,则不用进行遍历
for(AutoCloseable c: cs){
if(c != null){ //如果多个参数中有一个为null,则不用关闭
try {
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
//CommonUtils 公共的数据库操作工具类 import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; //公共的数据库操作工具类--增删改
public class CommonUtils <T> {
//公共类--增删改
public static int updateCommon(String sql,Object...objs){
//获取连接对象,再获取执行对象,操作添加
Connection conn = null;
PreparedStatement prst = null;
try {
conn = DBUtils.getConnection();
prst = conn.prepareStatement(sql);
//遍历传入的对象的多个字段
for(int i=0;i<objs.length;i++){
prst.setObject(i+1, objs[i]);
}
return prst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.closeAll(prst,conn);
}
return 0;
} //公共类---查询---注意:要传一个反射对象进来
public List<T> queryCommon(String sql,Class<T> clazz,Object...objs){
Connection conn = null;
PreparedStatement prst = null;
ResultSet resultSet = null;
List<T> list = new ArrayList<>();
try {
conn = DBUtils.getConnection(); //获取连接对象
prst = conn.prepareStatement(sql);
//遍历传入的对象的多个字段
for(int i=0;i<objs.length;i++){
prst.setObject(i+1, objs[i]);
} resultSet = prst.executeQuery(); //获取到结果集
//---最终将结果集的信息存储到List集合中---
while(resultSet.next()){ //循环一次,就是一条记录(一个对象)
//clazz.getFields(); //私有的属性获取不到
Field[] fields = clazz.getDeclaredFields();
T t = clazz.newInstance(); //通过反射对象获取到实体类对象
for(Field f: fields){
String fieldName = f.getName(); //得到属性名 //获取字段对应值
Object value = null;
try {
value = resultSet.getObject(fieldName); //如何确定获取的字段---对应上属性名
} catch (SQLException e) {
//获取映射属性中的字段名(is_admin)
Properties properties = new Properties();
try {
properties.load(CommonUtils.class.getClassLoader().getResourceAsStream("mapping.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
fieldName = properties.getProperty("isAdmin");
value = resultSet.getObject(fieldName);
} f.setAccessible(true); //设置权限
f.set(t, value); //把值设置的对象的属性中
}
list.add(t); //将对象存储到集合中
} } catch (SQLException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}finally {
DBUtils.closeAll(resultSet,prst,conn);
}
return list;
} //-------分页获取总条数-------
public static int getTotalCount(String sql){
//获取连接对象,再获取执行对象,操作添加
Connection conn = null;
PreparedStatement prst = null;
ResultSet resultSet = null;
try {
conn = DBUtils.getConnection();
prst = conn.prepareStatement(sql);
resultSet = prst.executeQuery();
if(resultSet.next()){
return resultSet.getInt(1); //获取第一个字段
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtils.closeAll(resultSet,prst,conn);
}
return -1;
}
}
//Dao层示例 import java.util.List;
import com.qf.dao.IUserDao;
import com.qf.entity.User;
import com.qf.utils.CommonUtils; public class UserDaoImpl extends CommonUtils<User> implements IUserDao { @Override
public int addUser(User user) {
String sql = "insert into t_user(name,password,sex,phone,email,is_admin) values(?,?,?,?,?,?)";
int result = CommonUtils.updateCommon(sql, user.getName(),user.getPassword(),user.getSex()
,user.getPhone(),user.getEmail(),user.getIsAdmin());
return result;
} @Override
public int updateUser(User user) {
String sql="update t_user set name=?,password=?,sex=?,phone=?,email=?,is_admin=? where id=?";
int result = CommonUtils.updateCommon(sql, user.getName(),user.getPassword(),user.getSex()
,user.getPhone(),user.getEmail(),user.getIsAdmin(),user.getId());
return result;
} @Override
public int delUserById(Integer id) {
String sql="delete from t_user where id=?";
return CommonUtils.updateCommon(sql, id);
} @Override
public List<User> getUserList() {
String sql="SELECT id, NAME, PASSWORD, CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' END AS sex, email, phone, CASE WHEN is_admin = 1 THEN '是' WHEN is_admin = 0 THEN '否' END AS is_admin FROM t_user";
return super.queryCommon(sql, User.class);
} @Override
public User getUserById(Integer id) {
String sql="select * from t_user where id = ?";
List<User> list = super.queryCommon(sql, User.class,id);
if(list.size()>0){ //如果取到数据,则返回该对象
return list.get(0);
}
return null; //取不到数据,则返回null
} @Override
public int getTotalCount() {
String sql="select count(1) from t_user";
return CommonUtils.getTotalCount(sql);
} @Override
public List<User> getUserListPage(Integer startIndex, Integer pageSize) {
String sql="SELECT id, NAME, PASSWORD, CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' END AS sex, email, phone, CASE WHEN is_admin = 1 THEN '是' WHEN is_admin = 0 THEN '否' END AS is_admin FROM t_user limit ?,?";
return super.queryCommon(sql, User.class,startIndex,pageSize);
} @Override //批量删除
public int batchDelIds(String[] ids) {
StringBuilder builder = new StringBuilder("delete from t_user where id in (");
for(int i=0;i<ids.length;i++){
if(i==ids.length-1){ //最后一个则不用+“,”;要加“)”
builder.append(ids[i]+")");
}else{
builder.append(ids[i]+",");
}
}
String sql = builder.toString();
return CommonUtils.updateCommon(sql);
} @Override //验证用户名和密码是否正确
public User getUserByBackLogin(String name, String password) { String sql="select * from t_user where name=? and password=?";
List<User> list = super.queryCommon(sql, User.class, name,password);
if(list.size()>0){
return list.get(0);
}
return null;
}
}
DBUtils工具类的更多相关文章
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- Java基础-DButils工具类(QueryRunner)详解
Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...
- 30_java之DButils工具类
01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类 * a: 概述 * DBUtils是java编程中的数据库操作实用工具,小巧简单实用. * DBUtils ...
- DBUtils工具类的使用
DBUtils工具类1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装. 做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删 ...
- DBUtils工具类和DBCP连接池
今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- dbutils工具类使用
1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...
- DBUtils工具类学习一
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能 1.特征 DBUtils是java编程中 ...
- Java学习笔记48(DBUtils工具类一)
上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...
随机推荐
- Map的嵌套 练习
Map的嵌套 练习 利用迭代和增强for循环的两种方式实现如下效果 package cn.ccc; import java.util.HashMap;import java.util.Iterat ...
- ROADMAP
- pycharm+pydesigner+pyqt5 如何添加图片资源
pydesigner 上添加资源比较容易: 步骤一用于编辑,步骤二步创建,步骤三创建文件新的qrc: 步骤一:新建一个Prefix,步骤二给prefix添加资源文件.至此,资源文件添加完成 采用 Py ...
- 【Unity Shader】---常用帮助函数、结构体和全局变量
[Unity Shader]---常用帮助函数.结构体和全局变量 一.内置包含文件 Unity中有类似于C++的包含文件.cginc,在编写Shader时我们可以使用#include指令把这些文件包含 ...
- C语言几个输入函数的区别(史上最详细)
The difference of the string and the character(char): 字符串是一个带有""的字符序列如 "I fuck xuqian ...
- 恢复win7快捷方式小箭头
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&q ...
- C# DataView数据处理的几种方法
1.找到刚删除的所有列 DataView dv = dt.DefaultView; dv.Delete(); dv.Delete(); //找出所有刚删除掉的行 1.5 dv.RowStateFilt ...
- 转:Excel—“撤销工作表保护密码”的破解并获取原始密码
在日常工作中,您是否遇到过这样的情况:您用Excel编制的报表.表格.程序等,在单元格中设置了公式.函数等,为了防止其他人修改您的设置或者防止您自己无意中修改,您可能会使用Excel的工作表保护功能, ...
- 全志A33开发板的安卓控制LED-2-JNI基础
虽然您可以完全使用Java编写应用程序,但有些情况下Java本身并不能满足您的应用程序的需求.当应用程序不能完全用Java编写时,程序员使用JNI编写Java本机方法来处理这些情况. 以下示例说明何时 ...
- Linux----------samba服务的安装使用及简介
一.Samba简介 Samba是在linux和Unix系统上实现SMB协议的一个免费软件,由服务器端和客户端程序组成. Samba与nfs的不同,Samba比nfs多支持Windows SMB ( ...