热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自己封装的BaseDao更加灵活方便hashmap

2019独角兽企业重金招聘Python工程师标准importjava.sql.Connection;importjava.sql.PreparedStatement;impo



2019独角兽企业重金招聘Python工程师标准>>> hot3.png




import java.sql.Connection;
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.Iterator;
import java.util.List;


import org.apache.log4j.Logger;


public class BaseControl {
 static Logger log = Logger.getLogger(BaseControl.class);
 
 
 /**
  * 查询
  * @param sql 查询Sql语句
  * @param params 参数集合
  * @return
  */
 public static List> executeQuery(String sql,Object...params){
  List> lists = new ArrayList>();
  Connection conn = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  try {
   conn = DBUtil.getConn();
   ps = conn.prepareStatement(sql);
   //给SQL参数进行赋值 
   int temp = 1;
   for (int i = 0; i
    ps.setObject(temp++, params[i]);
   }
   rs = ps.executeQuery();
   ResultSetMetaData rss = rs.getMetaData();
   int columnCount = rss.getColumnCount();
   String[] columnName = new String[columnCount];//获取字段名称集合
   while(rs.next()){
    HashMap map = new HashMap();
    for (int i = 0; i
      columnName[i] = rss.getColumnName(i+1);
    }
    for (int j &#61; 1; j <&#61; columnCount; j&#43;&#43;) {
     Object columnValue &#61; rs.getObject(j);
     map.put(columnName[j-1], columnValue);
    }
    lists.add(map);
   }
   return lists;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   log.error("查询SQL异常", e);
  }finally{
   DBUtil.closeConn(conn, ps, rs);
  }
  return null;
  }
 /**
  * 以数据库字段名为键&#xff0c;该字段值为值返回一个map
  * &#64;param sql查询语句
  * &#64;param param单条件查询
  * &#64;return
  */
 public static HashMapexecuteQueryByColumn(String sql,Object...params){
  HashMap map &#61; new HashMap();
  Connection conn &#61; null;
  PreparedStatement ps &#61; null;
  ResultSet rs &#61; null;
  conn &#61; DBUtil.getConn();
  try {
   ps &#61; conn.prepareStatement(sql);
   int temp &#61; 1;
   for (int i &#61; 0; i
    ps.setObject(temp&#43;&#43;, params[i]);
   }
   rs &#61; ps.executeQuery();
   ResultSetMetaData rss &#61; rs.getMetaData();
   int columnCount &#61; rss.getColumnCount();
   String[] columnName &#61; new String[columnCount];
   while(rs.next()){
    for (int i &#61; 0; i
     columnName[i] &#61; rss.getColumnName(i&#43;1);
    }
    for (int i &#61; 1; i <&#61;columnCount; i&#43;&#43;) {
     Object value &#61; rs.getObject(i);
     String Name &#61; columnName[i-1];
     map.put(Name, value);
    }
   }
   return map;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return null;
  
 };
 /**
  * 增加&#xff0c;修改&#xff0c;或删除
  * &#64;param sql
  * &#64;param params
  * &#64;return
  */
 public static int executeSaveOrUpdate(String sql,List params){
  Connection conn &#61; null;
  PreparedStatement ps &#61; null;
  try {
   conn &#61; DBUtil.getConn();
      ps &#61; conn.prepareStatement(sql);
   int temp &#61; 1;
   for (Iterator p &#61; params.iterator(); p.hasNext();) {
    ps.setObject(temp&#43;&#43;, p.next());
   }
   ps.addBatch();
   
   return ps.executeBatch().length;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   log.error("插入SQL异常", e);
  }finally{
   DBUtil.closeConn(conn, ps, null);
  }
  return 0;
  }
 /**
  * 少参数插入
  * &#64;param sql
  * &#64;param params
  * &#64;return
  */
 public static int executeSaveOrUpdate(String sql,Object... params){
  Connection conn &#61; null;
  PreparedStatement ps &#61; null;
  try {
   conn &#61; DBUtil.getConn();
      ps &#61; conn.prepareStatement(sql);
   int temp &#61; 1;
    for (int i &#61; 0; i
     ps.setObject(temp&#43;&#43;, params[i]);
    }
   
   ps.addBatch();
   
   return ps.executeBatch().length;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   log.error("插入SQL异常", e);
  }finally{
   DBUtil.closeConn(conn, ps, null);
  }
  return 0;
  }
 DBUtil类


public class DBUtil {  
   
   
 static Logger logger&#61;Logger.getLogger(DBUtil.class);  
   
 static Properties properties &#61; null;  
   
   
 /**  
  * 返回数库链接对象  
  * &#64;return  
  */  
 public static Properties getProperInfo() {  
  InputStream is &#61; Thread.currentThread().getContextClassLoader()  
    .getResourceAsStream("oracle.properties");  
  properties &#61; new Properties();  
  try {  
   properties.load(is);  
  } catch (IOException e) {  
   e.printStackTrace();  
   logger.error("数据库配置文件异常");  
  }  
  return properties;  
 }  
   
   
 /**  
  * 定义链接数据库方法  
  * &#64;return  
  * &#64;throws ClassNotFoundException  
  * &#64;throws SQLException  
  */  
 public static Connection getConn() {  
   if (properties &#61;&#61; null) {  
    properties &#61; getProperInfo();  
   }  
   String url &#61; properties.getProperty("url");  
   String user &#61; properties.getProperty("user");  
   String password &#61; properties.getProperty("password");  
     
   //加载数据库驱动  
   try {  
    logger.debug("加载数据库驱动");  
    Class.forName(properties.getProperty("driver"));  
   } catch (ClassNotFoundException e) {  
    e.printStackTrace();  
    logger.error("数据驱动加载异常", e);  
   }  
   //建立数据连接  
   try {  
    logger.debug("建立数据库连接");  
    return DriverManager.getConnection(url, user, password);  
   } catch (SQLException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
    logger.error("建立数据库连接异常", e);  
   }  
   logger.debug("数据连接成功");  
   return null;  
 }  
   
   
 /**  
  * 关闭链接  
  * &#64;param conn  
  * &#64;param ps  
  * &#64;param rs  
  */  
 public static void closeConn(Connection conn, PreparedStatement ps,ResultSet rs) {  
  try {  
   if (rs !&#61; null) {  
    rs.close();  
   }  
  } catch (SQLException e) {  
   e.printStackTrace();  
   logger.error("关闭ResultSet异常", e);  
  }  
  try {  
   if (ps !&#61; null) {  
    ps.close();  
   }  
  } catch (SQLException e) {  
   e.printStackTrace();  
   logger.debug("关闭PreparedStatement异常",e);  
  }  
  try {  
   if (conn !&#61; null) {  
    conn.close();  
   }  
  } catch (SQLException e) {  
   e.printStackTrace();  
   logger.error("关闭Connection异常", e);  
  }  
 }


测试&#xff1a; 
  String sql &#61; "select * from s_user ";


List> lists &#61; BaseControl.executeQuery(sql, null);


HashMap map &#61; new HashMap();


for (int i &#61; 0; i


map &#61; lists.get(i);


System.out.println(map.get("你所要查询的字段名&#xff08;大写&#xff09;"));


}
总结&#xff1a;与basedao一 相比 这种方式摆脱了 Javabean的限制&#xff0c;不必因为数据库增加或删除字段而对代码进行改动&#xff0c;数据库可以随时增删字段。代码也量减少了&#xff01; 如果有需要改进的地方请大家留下宝贵意见&#xff0c;谢谢&#xff01;







转载于:https://my.oschina.net/u/1169079/blog/176846



推荐阅读
  • 线上问题:JavaBean赋值基础类型抛出异常
    1问题复现1.1问题实体(JavaBean规范)赋值时,抛出异常。1.2原因使用基础类型定义属性,当使用null给属 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 感谢大家对IT十八掌大数据的支持,今天的作业如下:1.实践PreparedStament的CRUD操作。2.对比Statement和PreparedStatement的大批量操作耗时?(1 ... [详细]
  • Java中自动生成实体类
    Q1:实体层(vo)packagecom;importjava.io.File;importjava.io.FileWriter;importjava.io.IOExcep ... [详细]
  • springboot日志【转】【补】
     市面上的日志框架日志门面(日志的抽象层)日志实现JCL(JakartaCommonsLogging)(2014)SLF4j(SimpleLoggingFacadeforJava) ... [详细]
  • log4j相关
    Log4j的类图Logger-日志写出器,供程序员输出日志信息Appender-日志目的地,把格式化好的日志信息输出到指定的地方去ConsoleAppe ... [详细]
  • -1{baos.write;baos.flush(;}responseDatabaos.toByteArray(;}catch{thrownewIO ... [详细]
author-avatar
wbklzh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有