/**
* 通用更新
* @param sql
* @param objects
* @throws IOException
*/
public void update(String sql,Object...objects) throws IOException{
Connection conn=null;
PreparedStatement prst=null;
conn=DBTool.getConnection();
try {
prst=conn.prepareStatement(sql);
for(int i=0;i<objects.length;i++){
prst.setObject(i+1,objects[i]);
}
prst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBTool.close(prst, conn);
}
}

/**
* 通用查询
* @param clazz 实体类的字节码对象
* @param sql
* @param objects:填充占位符的可变参数
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws IOException
*/

//获取结果集,再获取有多少列和列的别名
//利用列的别名获取结果集中对应列的值,别名作为键,值作为Map集合的值添加到Map集合中,在把Map集合放到List集合中,
//遍历List集合和Map集合分别获取键和值(也就是实例的属性和属性值)

public <T> T get(Class<T> clazz,String sql,Object...objects) throws InstantiationException, IllegalAccessException, InvocationTargetException, IOException{
Connection conn=null;
PreparedStatement prst=null;
ResultSet rs=null;
conn=DBTool.getConnection();
T entity=null;
try {
prst=conn.prepareStatement(sql);
for(int i=0;i<objects.length;i++){
prst.setObject(i+1, objects[i]);
}
rs=prst.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
Map<String,Object> map=new HashMap<String,Object>();
if(rs.next()){
//获取结果集有多少列,及列的别名
for(int i=0;i<columnCount;i++){
String key=rsmd.getColumnLabel(i+1);
// 获取属性值
Object value=rs.getObject(i+1);
map.put(key, value);
}
if(map.size()>0){
entity=clazz.newInstance();
for(Map.Entry<String, Object> entry:map.entrySet()){
String key=entry.getKey();
Object value=entry.getValue();
BeanUtils.setProperty(entity, key, value);
}
}

}
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBTool.close(rs, prst, conn);
}
return entity;
}

//还可以把获取列的别名抽取出来

private List<String> getColumnLabels(ResultSet rs) throws SQLException{
List<String> labels=new ArrayList<String>();
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
for(int i=0;i<columnCount;i++){
String label=rsmd.getColumnLabel(i+1);
labels.add(label);
}
return labels;
}

转载于:https://www.cnblogs.com/cn-chy-com/p/8315837.html

利用反射和元数据编写的通用更新和通用查询相关推荐

  1. 利用反射及JDBC元数据编写通用的查询方法 cp66的头像 cp66 7 2015-02-13 23:16 0

    遇到了若干问题: 1.从oracle返回的列名都是大写,再用反射,就找不到相对应得 名字 2.oracle 中number类型 返回来,就变成了BigDecimal public static voi ...

  2. .NetCore 利用反射处理RESTful的更新自动赋值

    背景 在RESTful Api模式开发Api,Patch更新时,频繁的遇到不同类型但属性相同的Dto到Model字段赋值的情况, 网上通用的类库是AutoMapper,但遇到了问题,查了Git也提出了 ...

  3. 利用反射实现类的动态加载

    为什么80%的码农都做不了架构师?>>>    //首先定义一个接口来隔离类: public interface Operator { // public java.util.Lis ...

  4. 反射应用二:利用反射加配置文件实现多数据库的访问

    在上一篇文章中讲解了什么是反射,以及利用反射可以获取程序集里面的哪些内容.在平时的项目中,可能会遇到项目需要使用多种数据库,这篇文章中将会讲解如何利用反射实现访问多种数据库. 项目整体结构如下图所示: ...

  5. 【纯干货】SSM 实现将数据导出为 Excel 表格(利用反射实现类型通配)

    0. 这里假设 SSM 环境已经搭建完成 1. 需要三个依赖包 <!-- 导出为 Excel --> <dependency><groupId>org.apache ...

  6. 利用反射整合ViewBinding和ViewHolder

    利用反射整合ViewBinding和ViewHolder 自从DataBinding和ViewBinding出现后,Android开发中获取界面元素就变得非常方便.即使是RecyclerView的Vi ...

  7. java 反射修改final变量_Java中final的属性值怎么利用反射机制进行修改

    Java中final的属性值怎么利用反射机制进行修改 发布时间:2020-12-02 17:31:07 来源:亿速云 阅读:96 作者:Leah 今天就跟大家聊聊有关Java中final的属性值怎么利 ...

  8. Atitit利用反射获取子类 集合 以及继承树

    Atitit利用反射获取子类 集合 以及继承树 想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类. Eclipse实现不是重父类开始找而是重子类往回 ...

  9. 利用反射及ActionFilterAttribute实现MVC权限管理

    1.利用反射获取当前程序集下的所有控制器和方法,拼接后写入到数据库. public void GetRightInfo(){var ControllerIDMax = db.rights_info.S ...

  10. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

最新文章

  1. MySQL删除用户权限(REVOKE)
  2. python正则匹配_python 正则表达式详解
  3. spring 监听器 IntrospectorCleanupListener简介
  4. ASP.NET MVC 3: Razor视图引擎中 @: 和text 语法【转载】
  5. 开源:分享10 个让你笑的合不拢嘴的 GitHub 项目!
  6. poj 1904 King's Quest 强连通分量+匹配
  7. .Net并行编程系列文章导航
  8. Test for Activity to display Deslayed
  9. Unity3D界面功能操作讲解【转http://www.cnblogs.com/fortomorrow/archive/2012/10/28/unity01.html】...
  10. SNIFFER(嗅探器)-简介(zt)
  11. 大数据下的精准实时监控系统 | Promethus or Zabbix?
  12. 面向对象之抽象类与接口【Java】
  13. 遇到的一个网页排版问题
  14. scrapy爬虫没有任何的返回数据( Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min))
  15. 手机的 32K,26M时钟电路作用 (转载于 52rd zsqt8888的专栏)
  16. html+js+css国际象棋,画面超精致!!
  17. Breed Counting(水?)
  18. GetMessagePeekMessage 和SendMessagePostMessage
  19. Address localhost:1099 is already in use
  20. mysql职业生涯规划书_计算机应用职业生涯规划书.pdf

热门文章

  1. Java中的对象都是在堆上分配的吗?
  2. 记住:永远不要在MySQL中使用utf8,请使用utf8mb4
  3. 推荐一些不错的公众号【一】
  4. pdf转swf linux,Linux环境安装配置Swftools,pdf转swf工具
  5. [转载]【深入Java虚拟机】之四:类加载机制
  6. iOS Xcode Implicit declaration of function 'callbackBlock' is invalid in C99
  7. emule学习与分析一 概述
  8. Visual Studio Debug Practice
  9. HTML,CSS基础十大重点问题
  10. Day11名称空间,作用域,闭包函数