DBUtil数据库工具类

 使用前提:

使用本类中的方法需要定义一个函数式接口IRowMapper,如下:

import java.sql.ResultSet;

@FunctionalInterface
public interface IRowMapper {

    void rowMapper(ResultSet resultSet);
}

 DBUtil源代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 数据库工具类
 * 
 * @author 肥胖的企鹅
 */
public class DBUtil {

    static {
	try {
	    Class.forName("com.mysql.jdbc.Driver");//加载驱动
	} catch (ClassNotFoundException e) {
	    e.printStackTrace();
	}
    }

    /**
     * 获取数据库链接
     * 
     * @author 肥胖的企鹅
     */
    private static Connection connect(){
        try {
	    DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
	}catch (SQLException e) {
	    e.printStackTrace();
	}
	return null;
    }
	
    /**
     * 修改数据
     * 
     * @author 肥胖的企鹅
     */
    public static boolean upDate(String sql) {
	Connection connection =null;
	Statement statement = null;
	connect();
	try {
	    connection=connect();
	    statement = connection.createStatement();//创建语句
	    int result = statement.executeUpdate(sql);//执行语句
	    return result > 0;//返回结果
	} catch (Exception e) {
	    e.printStackTrace();
	}finally {
	    close(statement,connection);//释放资源
	}
	return false;
    }
	
    /**
     * 修改数据
     * 
     * @author 肥胖的企鹅
     */
    public static boolean upDate(String sql,Object ... params) {
	Connection connection =null;
	Statement statement = null;
	try {
	    connection=connect();
	    PreparedStatement preparedStatement = connection.prepareStatement(sql);//创建语句
	    for (int i = 1; i <= params.length; i++) {
		preparedStatement.setObject(i,params[i-1] );//执行语句
	    }
	    int effectRows = preparedStatement.executeUpdate();
	    return effectRows > 0;//返回结果
	} catch (Exception e) {
	    e.printStackTrace();
	}finally {
	    close(statement,connection);//释放资源
	}
	return false;
    }
	
    /**
     * 判断是否存在
     * 
     * @author 肥胖的企鹅
     */
    public static boolean exist(String sql) {
	class RowMapper implements IRowMapper{
	    boolean state=false;
	    @Override
	    public void rowMapper(ResultSet resultSet) {
	        try {
	            if(resultSet.next()) {
		        state = true;
		    }
	        } catch (SQLException e) {
		    e.printStackTrace();
	        }
            }
        }
        RowMapper rowMapper = new RowMapper();
        select(sql,rowMapper);
        return rowMapper.state;
    }
	
    /**
     * 判断数据是否存在
     * 
     * @author 肥胖的企鹅
     */
    public static boolean exist(String sql,Object ... params) {
	class RowMapper implements IRowMapper{
	    boolean state=false;
	    @Override
	    public void rowMapper(ResultSet resultSet) {
	        try {
		    state = resultSet.next();
		} catch (SQLException e) {
		    e.printStackTrace();
		}
	    }
	}
	RowMapper rowMapper = new RowMapper();
	select(sql,rowMapper,params);
	return rowMapper.state;
    }
	
    /**
     * 查询数据
     * 
     * @author 肥胖的企鹅
     */
    public static void select(String sql,IRowMapper rowMapper) {//参数传递
	Connection connection =null;
	Statement statement = null;
	ResultSet resultSet = null;
	try {
	    connection=connect();
	    statement = connection.createStatement();//创建语句
	    resultSet = statement.executeQuery(sql);//执行语句
	    rowMapper.rowMapper(resultSet);
	} catch (Exception e) {
	    e.printStackTrace();
	}finally {//释放资源
	    close(statement,resultSet,connection);
	}
    }
	
    /**
     * 查询数据
     * 
     * @author 肥胖的企鹅
     */
    public static void select(String sql,IRowMapper rowMapper,Object ... params) {
	Connection connection =null;
	ResultSet resultSet = null;
	PreparedStatement preparedStatement = null;
	try {
	    connection  = connect();
	    preparedStatement = connection.prepareStatement(sql);//创建语句
	    for(int i =1;i<=params.length;i++) {
		preparedStatement.setObject(i, params[i-1]);
	    }
	    resultSet = preparedStatement.executeQuery();//preparedStatement对象中已经存在sql语句,无需再次赋值
	    rowMapper.rowMapper(resultSet);	
	} catch (Exception e) {
	    e.printStackTrace();
	}finally {//释放资源
	    close(preparedStatement,resultSet,connection);
	}
    }

    /**
     * 批处理方法
     * 
     * @author 肥胖的企鹅
     */
    public static boolean batch(String ... sqls) {
	Connection connection=null;
	Statement statement = null;
	try {
	    Class.forName("com.mysql.jdbc.Driver");
	    connection = connect();
	    connection.setAutoCommit(false);//必须在创建语句之前
	    statement = connection.createStatement();
	    for (String sql : sqls) {
		statement.addBatch(sql);//将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。
	    }
	    statement.executeBatch();//将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
	    connection.commit();
	    return true;
        } catch (Exception e) {
	    e.printStackTrace();
	    if (connection!=null) {//避免空指针异常
		try {
		    connection.rollback();//如果异常则回滚,撤销缓存中的所有语句
		} catch (Exception e1) {
		    e1.printStackTrace();
		} 
	    }
	} finally {
	    close(statement, connection);
	}
	return false;
    }
	
    /**
     * 批处理方法
     * 
     * @author 肥胖的企鹅
     */
    public static boolean batch(String sql,Object []... params) {//注意这种防SQL注入的方法仅适用于使用同一个SQL语句模板添加多个不同数据
        Connection connection=null;
	PreparedStatement preparedStatement = null;
	try {
	    Class.forName("com.mysql.jdbc.Driver");
	    connection = connect();
	    connection.setAutoCommit(false);//必须在创建语句之前
	    preparedStatement = connection.prepareStatement(sql);
	    for(int i=0;i<params.length;i++) {
	        for(int j=1;j<=params[i].length;j++) {
		    preparedStatement.setObject(j,params[i][j-1]);
		}
		preparedStatement.addBatch();
	    }
	    preparedStatement.executeBatch();//将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
	    connection.commit();
	    return true;
	} catch (Exception e) {
	    e.printStackTrace();
	    if (connection!=null) {//避免空指针异常
	        try {
	            connection.rollback();//如果异常则回滚,撤销缓存中的所有语句
	        } catch (Exception e1) {
	            e1.printStackTrace();
	        } 
	    }
	} finally {
	    close(preparedStatement,connection);
	}
	return false;
    }
	
    /**
     * 释放资源
     * 
     * @author 肥胖的企鹅
     */
    private static void close(Statement statement,ResultSet resultSet,Connection connection) {
        if (resultSet != null) {
	    try {
	        resultSet.close();
	    } catch (SQLException e) {
		e.printStackTrace();
	    } 
	}
	close(statement,connection);
    }

    /**
     * 释放资源
     * 
     * @author 肥胖的企鹅
     */
    private static void close(Statement statement,ResultSet resultSet,Connection connection) {
        if (resultSet != null) {
	    try {
	        resultSet.close();
	    } catch (SQLException e) {
		e.printStackTrace();
	    } 
	}
	close(statement,connection);
    }
	
    /**
     * 释放资源
     * 
     * @author 肥胖的企鹅
     */
    private static void close(Statement statement,Connection connection) {
	if (statement != null) {
	    try {
		statement.close();
	    } catch (SQLException e) {
	    e.printStackTrace();
	    } 
        }
	if (connection != null) {
	    try {
	    connection.close();
	    } catch (SQLException e) {
		e.printStackTrace();
	    } 
	}
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值