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

JDBC查询工具类

importcom.alibaba.druid.pool.DruidDataSource;importcom.alibaba.druid.pool.DruidPooled

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.CaseFormat;
import org.apache.commons.beanutils.BeanUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 封装为任何JDBC数据库的任何查询都可以使用该工具类的方法
* id为主键
* select count(*) from t; 单行单列
* select * from t where id = '1001'; 单行多列
* select count(*) from t group by tm_id; 多行单列
* select * from t; 多行多列(实现它即可实现上面的)
*多行多列:使用list集合存储,因为每行数据都是相同格式,对于列(不确定),所以使用泛型
*/
public class JdbcUtil {
//Class clz:用于给泛型构建对象. boolean underScoreToCamel:用于判断是否进行格式转换
public static List queryList(Connection connection,String sql,Class clz, boolean underScoreToCamel) throws Exception {
//1.创建集合用于存放结果数据
ArrayList list = new ArrayList<>();
PreparedStatement preparedStatement =null;
ResultSet resultSet =null;
try {
//2.预编译SQL
preparedStatement = connection.prepareStatement(sql);
//3.执行SQL查询
resultSet = preparedStatement.executeQuery();
//4.遍历查询结果集,将每行数据封装为T对象并放入集合
//通过元数据拿到列信息
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
//4.1 行遍历
while (resultSet.next()){
//构建T对象(每一行是一个T,所以在行遍历下构建)
T t = clz.newInstance();
//4.2列遍历
for (int i = 0; i //获取列名,jdbc中下标以1开始
String columnName = metaData.getColumnName(i + 1);
//通过列名拿到值
Object value = resultSet.getObject(columnName);
//给T对象赋值(把每一列加进去,所以在列遍历下赋值)
//如果需要转化列名格式
if (underScoreToCamel){
//Google下的转换包 将下划线转为小驼峰
columnName = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, columnName.toLowerCase());
}
//给泛型对象赋值,使用BeanUtils工具类
BeanUtils.setProperty(t,columnName,value);
}
//将T对象加入集合
list.add(t);
}
} finally {
if (resultSet !=null){
resultSet.close();
}
if (preparedStatement!=null){
preparedStatement.close();
}
}
//5.返回集合
return list;
}
public static void main(String[] args) throws Exception {
//获取连接
DruidDataSource dataSource = DruidDSUtil.createDataSource();
DruidPooledConnection cOnnection= dataSource.getConnection();
List queryList = queryList(connection,
"select * from GMALL220212_REALTIME.DIM_BASE_TRADEMARK where id='15'",
JSONObject.class,
true);
for (JSONObject jsonObject : queryList) {
System.out.println(jsonObject);
}
connection.close();
}
}


版权声明:本文为qq_50408152原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_50408152/article/details/126101898
推荐阅读
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
author-avatar
ErnastoChen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有