JdbcUtil连接数据库,定义工具类

/**
 * JDBC数据库操作工具类:通过配置文件读取数据库连接信息,统一释放资源,通过查询和更新sql语句
 * 
 * @author zhukang
 *
 */
public class JdbcUtil {

	/**
	 * 通过外部配置文件,读取数据库配置信息,实现动态配置,将配置和代码进行解耦
	 */
	public static Connection getConnection() throws Exception {
		// 通过properties属性文件读取配置
		// 1 定义一个属性文件对象
		Properties properties = new Properties();

		// 2 使用反射机制,通过类加载器读取配置文件,返回一个输入流对象
		InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");

		// 3 将流对象转为属性对象
		properties.load(is);

		// 4 读取配置
		String driverClass = properties.getProperty("driverClass");
		String jdbcUrl = properties.getProperty("jdbcUrl");
		String user = properties.getProperty("user");
		String password = properties.getProperty("password");

		// 加载驱动
		Class.forName(driverClass);

		// 返回数据库连接对象
		return DriverManager.getConnection(jdbcUrl, user, password);
	}

	/**
	 * 统一释放数据库连接资源
	 */
	public static void releaseJdbc(ResultSet rs, Statement stmt, Connection conn) {
		try {
			if (null != rs) {
				rs.close();
			}
			if (null != stmt) {
				stmt.close();
			}
			if (null != conn) {
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 增删改的通用方法,只需要动态传入SQL语句,多个参数即可,注意,传入参数顺序要跟sql中的?对应
	 */
	public static int update(String sql, Object ... params) {
		// 初始化数据库操作对象
		Connection conn = null;
		PreparedStatement pstmt = null;

		// 影响行数
		int row = 0;
		try {
			// 获取连接
			conn = getConnection();
			// 获取预处理SQL对象:必须带入预编译sql
			pstmt = conn.prepareStatement(sql);
			// 动态传入参数
			int index = 1;
			// jdk8写法
//			Arrays.stream(params).forEach(param -> {
//				pstmt.setObjec t(index++, param);
//			});
			// 普通写法
			for (int i = 0; i < params.length; i++) {
				pstmt.setObject(i+1, params[i]);
			}

			// 直接执行sql,不需要参数
			row = pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			releaseJdbc(null, pstmt, conn);
		}
		return row;
	}
	/**
	 * 登录查询操作
	 */
	public static Boolean select(String sql,Object ... params ){
		
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		boolean flag = false;
		
		try {
				
			con = getConnection();
			pstmt = con.prepareStatement(sql);
			
			for (int i = 0; i < params.length; i++) {
				pstmt.setObject(i+1, params[i]);
			}
//			flag = pstmt.execute();
			rs = pstmt.executeQuery();
			
			if(rs.next()){
				System.out.println(pstmt.toString());
				flag = true;
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			releaseJdbc(rs, pstmt, con);
			e.printStackTrace();
		}
			
		return flag;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值