wowo.zip

  • ajhNzj
    了解作者
  • Java
    开发工具
  • 9.8MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2020-11-14 11:30
    上传日期
仿窝窝团,一个团购的网站,购物网站,有完整的前台和后端
wowo.zip
内容介绍
package com.yc.wowo.dao; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; /** * 源辰信息 * @author navy * @date 2020年7月17日 */ public class DBHelper{ /* * static { // 加载驱动 - 只需要在类第一次加载的时候执行一次 try { * Class.forName(ReadConfig.getInstance().getProperty("driverClassName")); } * catch (ClassNotFoundException e) { e.printStackTrace(); } } */ /** * 获取连接的方法 * @return 获取到的连接 */ private Connection getConnection() { Connection con = null; try { // con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/wowo?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true", "root", "a"); // 从数据库连接池中获取一个空闲的连接 -> 先获取DataSource Context context = new InitialContext(); // 从命名目录接口中根据资源名查询资源,前面java:comp/env/是固定的,类似于协议 DataSource dataSource = (DataSource) context.lookup("java:comp/env/wowo"); // 从连接池中获取一个空闲连接 con = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } return con; } /** * 给预编译块语句中的占位符?赋值 * @param pstmt * @param params 要执行的sql语句中对应占位符?的值,即按照?的顺序给定的值 */ private void setParams(PreparedStatement pstmt, Object ... params) { if (params == null || params.length <= 0) { // 说明没有参数给我, 也就意味着执行的SQL语句中没有占位符? return; } for (int i = 0, len = params.length; i < len; i ++) { try { pstmt.setObject(i + 1, params[i]); } catch (SQLException e) { e.printStackTrace(); System.out.println("第 " + (i + 1) + " 个参数注值失败..."); } } } /** * 给预编译块语句中的占位符?赋值 * @param pstmt * @param params 要执行的sql语句中对应占位符?的值,即按照?的顺序给定的值 */ private void setParams(PreparedStatement pstmt, List<Object> params) { if (params == null || params.isEmpty()) { // 说明没有参数给我, 也就意味着执行的SQL语句中没有占位符? return; } for (int i = 0, len = params.size(); i < len; i ++) { try { pstmt.setObject(i + 1, params.get(i)); } catch (SQLException e) { e.printStackTrace(); System.out.println("第 " + (i + 1) + " 个参数注值失败..."); } } } /** * 关闭资源的方法 * @param rs 要关闭的结果集 * @param pstmt 要关闭的预编译对象 * @param con 要关闭的连接 */ private void close(ResultSet rs, PreparedStatement pstmt, Connection con) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 更新操作 * @param sql 要执行的更新语句,可以是insert、delete或update * @param params 要执行的sql语句中对应占位符?的值,即按照?的顺序给定的值 * @return */ public int update(String sql, Object ... params) { // 采用不定参数形式 int result = -1; Connection con = null; PreparedStatement pstmt = null; try { con = this.getConnection(); pstmt= con.prepareStatement(sql); // 预编译执行语句 this.setParams(pstmt, params); // 给预编译执行语句中的占位符赋值 result = pstmt.executeUpdate(); // 执行更新 } catch (SQLException e) { e.printStackTrace(); } finally { this.close(null, pstmt, con); } return result; } public int updates(List<String> sqls, List<List<Object>> params) { // 采用不定参数形式 int result = -1; Connection con = null; PreparedStatement pstmt = null; try { con = this.getConnection(); con.setAutoCommit(false); // 关闭自动事务提交 for (int i = 0, len = sqls.size(); i < len; i ++) { pstmt= con.prepareStatement(sqls.get(i)); // 预编译执行语句 this.setParams(pstmt, params.get(i)); // 给预编译执行语句中的占位符赋值 result = pstmt.executeUpdate(); // 执行更新 } con.commit(); // 提交事务 } catch (SQLException e) { result = 0; try { con.rollback(); // 回滚事务 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { try { con.setAutoCommit(true); // 最终还是要开启自动事务提交 } catch (SQLException e) { e.printStackTrace(); } this.close(null, pstmt, con); } return result; } /** * 更新操作 * @param sql 要执行的更新语句,可以是insert、delete或update * @param params 要执行的sql语句中对应占位符?的值,即按照?的顺序给定的值 * @return */ public int update(String sql, List<Object> params) { // 采用不定参数形式 int result = -1; Connection con = null; PreparedStatement pstmt = null; try { con = this.getConnection(); pstmt= con.prepareStatement(sql); // 预编译执行语句 this.setParams(pstmt, params); // 给预编译执行语句中的占位符赋值 result = pstmt.executeUpdate(); // 执行更新 } catch (SQLException e) { e.printStackTrace(); } finally { this.close(null, pstmt, con); } return result; } /** * 获取结果集中所有列的类名 * @param rs 结果集对象 * @return * @throws SQLException */ private String[] getColumnNames(ResultSet rs) throws SQLException { ResultSetMetaData rsmd = rs.getMetaData(); // 获取结果集中的元数据 int colCount = rsmd.getColumnCount(); // 获取结果集中列的数量 String[] colNames = new String[colCount]; for (int i = 1; i <= colCount; i ++) { // 循环获取结果集中列的名字 colNames[i - 1] = rsmd.getColumnName(i).toLowerCase(); // 将列名改成小写后存到数组中 } return colNames; } /** * 查询 * @param sql 要执行的查询语句 * @param params 要执行的sql语句中对应占位符?的值,即按照?的顺序给定的值 * @return 满足条件的数据 每一条数据存到一个map中以列名为键,以对应列的值位置,然后将每一条数据即map对象存到list中 */ public List<Map<String, Object>> finds(String sql, Object ... params) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = this.getConnection(); // 获取连接 pstmt = con.prepareStatement(sql); // 预编译语句 this.setParams(pstmt, params); // 给预编译语句中的占位符赋值 rs = pstmt.executeQuery(); // 执行查询 Map<String, Object> map = null; // 如果获取结果集中列的类名 -> 取到列名后我们存到一个数组中,便于后面的循环取值 -> 如何确定数组的大小? String[] colNames = this.getColumnNames(rs); Object obj = null; // 列的数据 String colType = null; // 返回的这个列的�
评论
    相关推荐
    • java web开发
      java web开发
    • JAVA WEB
      java web 的课件
    • java WEB开发
      J2EE技术PPT资料_041013
    • JAVA WEB开发
      基于Java WEB 技术的基础讲解文档
    • Java Web开发
      软件开发,IT认证,网络软件
    • jsp java web
      零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web零基础学Java Web
    • Java Web开发
      Java Web开发
    • Java Web开发
      以前看过的关于JAVA开发环境的书 适合初学者
    • java web开发
      java web开发整套教程
    • java web开发
      这个文档对于学习java web的人来说很好,很浅显易懂,学习java的开发人员可以看看,讲的挺好的,可以用于J2EE的面试