问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JDBC中提供的两种实现数据查询的方法是什么?

发布网友 发布时间:2022-04-23 11:30

我来回答

3个回答

懂视网 时间:2022-05-01 04:31

public Customer getCustomer(String sql, Object... args) { 2 Customer customer = null; 3 Connection connection = null; 4 PreparedStatement preparedStatement = null; 5 ResultSet resultSet = null; 6 try { 7 connection = JDBCTools.getConnection(); 8 preparedStatement = connection.prepareStatement(sql); 9 for (int i = 0; i < args.length; i++) { 10 preparedStatement.setObject(i + 1, args[i]); 11 } 12 resultSet = preparedStatement.executeQuery(); 13 if (resultSet.next()) { 14 // student = new Student(resultSet.getInt(1), 15 // resultSet.getInt(2), 16 // resultSet.getString(3), resultSet.getString(4), 17 // resultSet.getString(5), resultSet.getString(6), 18 // resultSet.getInt(7)); 19 customer = new Customer(); 20 customer.setId(resultSet.getInt(1)); 21 customer.setName(resultSet.getString(2)); 22 customer.setEmail(resultSet.getString(3)); 23 customer.setBirth(resultSet.getDate(4)); 24 } 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } finally { 28 JDBCTools.release(resultSet, preparedStatement, connection); 29 } 30 return customer; 31 32 }

查询examstudent表中的字段以及字段值:

 1 public Student getStudent(String sql, Object... args) {
 2  Student student = null;
 3  Connection connection = null;
 4  PreparedStatement preparedStatement = null;
 5  ResultSet resultSet = null;
 6  try {
 7  connection = JDBCTools.getConnection();
 8  preparedStatement = connection.prepareStatement(sql);
 9  for (int i = 0; i < args.length; i++) {
10   preparedStatement.setObject(i + 1, args[i]);
11   }
12  resultSet = preparedStatement.executeQuery();
13  if (resultSet.next()) {
14   student = new Student(resultSet.getInt(1), resultSet.getInt(2),
15    resultSet.getString(3), resultSet.getString(4),
16    resultSet.getString(5), resultSet.getString(6),
17    resultSet.getInt(7));
18   }
19  } catch (Exception e) {
20   e.printStackTrace();
21  } finally {
22   JDBCTools.release(resultSet, preparedStatement, connection);
23  }
24  return student;
25 
26 }

元数据:元数据就是描述数据的数据

可以看到两个操作有共同的步骤,不同的地方代码相似度也很高,于是我们就可以在此基础上编写一个通用的方法实现我们查询数据表的操作。

/**
 * ResultSetMetaData: 
 * 1).是描述ResultSet的元数据对象,即从中可以获取到 结果集中有多少列,列名是什么。。。
 * 2).如何使用呢? 1.得到ResultSetMetaData对象: 调用ResultSet的getMetaData()方法
 * 2.ResultSetMetaData有哪些好用的方法?
 * 
 * >int getColumnCount():SQL语句中包含哪些列 
 * >String getColumn(int column):获取指定列的别名,其中索引从1开始
 * 
 */

具体的代码实现:

 1 public <T> T get(Class<T> classz, String sql, Object... args) {
 2  T entity = null;
 3  Connection connection = null;
 4  PreparedStatement preparedStatement = null;
 5  ResultSet resultSet = null;
 6  try {
 7  connection = JDBCTools.getConnection();
 8  preparedStatement = connection.prepareStatement(sql);
 9  for (int i = 0; i < args.length; i++) {
10   preparedStatement.setObject(i + 1, args[i]);
11   }
12  resultSet = preparedStatement.executeQuery();
13 
14  ResultSetMetaData rsmd = resultSet.getMetaData();
15  Map<String, Object> values = new HashMap<String, Object>();
16  if (resultSet.next()) {
17   for (int i = 0; i < rsmd.getColumnCount(); i++) {
18   String columnLabel = rsmd.getColumnLabel(i + 1);
19   Object columnValue = resultSet.getObject(columnLabel);
20    values.put(columnLabel, columnValue);
21   }
22   }
23  if (values.size() > 0) {
24   entity = classz.newInstance();
25   for (Map.Entry<String, Object> entry : values.entrySet()) {
26   String fieldName = entry.getKey();
27   Object fieldValue = entry.getValue();
28    ReflectionUtils
29     .setFieldValue(entity, fieldName, fieldValue);
30   }
31   }
32  } catch (Exception e) {
33   e.printStackTrace();
34  } finally {
35   JDBCTools.release(resultSet, preparedStatement, connection);
36  }
37  // 返回包含查询信息的实体类对象
38  return entity;
39 }

get方法的编写实现步骤:

/**
 * 1.先利用SQL进行查询,得到结果集
 * 2.利用反射创建实体类的对象:创建Student对象
 * 3.获取结果集的列的别名:idCard、studentName 
 * 4.再获取结果集的每一列的值,结合3得到一个Map,键是列的别名:值;列的值:{flowid:5,type=6,idCard:xxx...} 列的别名和我们实体类的属性字段名一致
 * 5.再利用反射为2的对应的属性赋值 属性:Map的键 属性值:Map的键值
 */

我们写一个@test方法测试一下:

 1  @Test
 2 public void testGet() {
 3  String sql = "select id,name,email,birth "
 4   + " from customers where id=?";
 5  System.out.println(sql);
 6  Customer customer = get(Customer.class, sql, 3);
 7  System.out.println(customer);
 8  sql = "select flow_id flowId,type, idcard idCard, exam_card examCard,"
 9   + "student_name studentName,location,grade from examstudent where "
10   + " flow_id=?";
11  System.out.println(sql);
12  Student student = get(Student.class, sql, 3);
13  System.out.println(student);
14 }

运行结果:

select id,name,email,birth from customers where id=?
Customer [id=3, name=ABCD, email=mike@163.com, birth=1992-06-07]
select flow_id flowId,type, idcard idCard, exam_card examCard,student_name studentName,location,grade from examstudent where flow_id=?
Student [flowId=3, type=6, idCard=371522199206078411, examCard=2015534083, studentName=li, location=dalian, grade=87]

 

JDBC学习笔记——利用反射及JDBC元数据编写通用的查询方法

标签:

热心网友 时间:2022-05-01 01:39

Statement 和 PreparedStatement 的
executeQuery() ?
数据查询就是得到一个ResultSet对象。是不是你想要的答案?如不是请说详细一点。来自:求助得到的回答

热心网友 时间:2022-05-01 02:57

Connection对象
Statement createStatement()

加 Statement 的

ResultSet executeQuery(String sql)



PreparedStatement prepareStatement(String sql)
加 PreparedStatement 的

ResultSet executeQuery()
彻底搞懂JDBC的运行过程

JDBC的全称是Java DataBase Connection,也就是Java数据库连接,我们可以用它来操作关系型数据库。JDBC接口及相关类在java.sql包和javax.sql包里。我们可以用它来连接数据库,执行SQL查询,存储过程,并处理返回的结果。JDBC接口让Java程序和JDBC驱动实现了松耦合,使得切换不同的数据库变得更加简单。JDBC的...

非结构化数据如何可视化呈现?

通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准...

JDBC的工作原理是什么?

JDBC工作原理主要分3个步骤:1、加载数据库驱动。2、获取数据库连接。3、发送sql语句访问数据库 。1、加载数据驱动:使用Class.forName方法,调用这个方法会加载数据库驱动com.MySQL.jdbc.driver。关于数据库驱动的理解,其实是sun公司给了一个Driver的接口,然后各个数据厂商根据自己的数据库 来实现这个接口。

JDBC连接数据库的步骤都有哪些?

1、首先我们通过数据库可视化工具navicate for mysql,新建一个数据库,名字叫test新建一张表。2、添加id,name字段,点击【保存】,设置表名称为user。3、最终数据库及表创建成功。4、然后我们添加一条数据。5、下载java mysql connector驱动,通过maven添加依赖即可。

JDBC使用步骤过程

(2)执行动态SQL语句。通常通过PreparedStatement实例实现。(3)执行数据库存储过程。通常通过CallableStatement实例实现。5、执行SQL语句。Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 和execute 6、处理两种情况的结果。(1)执行更新返回的是本次操作影响到的记录数。(2)执行查询...

java中简述使用JDBC完成数据库操作的基本步骤。

两种情况:1、执行更新返回的是本次操作影响到的记录数。2、执行查询返回的结果是一个ResultSet对象。• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。• 使用结果集(ResultSet)对象的访问方法获取数据:while(rs.next()){ String name =...

在JAVA中,常用的两种jdbc的驱动方式是什么?

这种方法就是在JAVA 与 DATABASE之间价起了一台专门用与数据库连接的服务器(一般由数据库厂商提供)。他的好处在于能优化连接。4:4类驱动。这就是纯JDBC+DATABASE的连接方式。也是推荐的连接方式。这使得APPLICATION与数据库分开,开发者只需关心内部逻辑的实现而不需注重数据库连接的具体实现。在这...

GBase8s如何通过jdbc实现Distinct类型数据的插入与查询?

该语句是 SQL ANSI/ISO 标准的扩展;用法 Distinct 类型是基于内置数据类型或现有不透明数据类型,指定的 ROW 数据类型或者其它 Distinct 数据类型的数据类型。Distinct 数据类型是强归类的。虽然 Distinct 类型与其源类型对数 具有相同的物理表示法,但两种类型的值在没有从一种类型到另一种类型的显式强制...

详细讲解Quartz如何从入门到精通

实际上提供两种不同的实现 但两种实现一般都称为JDBC作业存储 两种JDBC作业存储都需要JDBC驱动程序和后台数据库来持久化调度程序信息 这两种类型的不同在于你是否想要控制数据库事务或这释放控制给应用服务器例如BEA s WebLogic或Jboss (这类似于J EE领域中 Bean管理的事务和和容器管理事务之间的区别)这两种JDBC作业...

JAVA的问题 在线等!!! 高手来!!!

当用JDBC driver向数据库中插入数据时,需要先将Unicode转成native code; 当 JDBC driver从数据库中查询数据时,则需要将native code转换成Unicode. 下面给出了这两种转换的实现: String native2Unicode(String s) { if (s == null || s.length() == 0) { return null; } byte[] buffer = new byte[s...

JDBC连接ORACLE的的几种格式

格式一**:通过使用 Oracle JDBC Thin 并结合 SID(系统标识符)的方式连接数据库。这种格式推荐使用,因为每个集群节点的 SID 可能不同,而 SERVICE_NAME 可以包含所有节点。格式二**:使用 Oracle JDBC Thin 并结合 ServiceName 进行连接。对于集群环境,这种格式提供了一种更灵活的连接方式。格式三**...

数据筛选有哪两种方法 获取数据的方式可以分为两种 用于存放数据库数据的是 数据筛选的方法 获取数据的方法有哪些 数据是什么 数据筛选有哪两种 数据分为哪两种类型 数据的定义
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
to B和to C是什么意思?它们有什么区别? To B和To C,你真的知道它们之间的区别么? 听歌一小时能赚钱吗? 听歌一定能赚钱吗? 怎么在网上做海报?怎么做海报电子版 北京哪个医院体检便宜 乌兰浩特盛京医院是公立还是私立,会不会存在隐形消费?想做人流,不知道... 用医保卡买药,结果收费划卡的多收了300元,请问这属于什么行为呀 重庆术妍整形,医生技术如何?到了医院还有其他隐形消费吗? 网上找的人流医院隐形消费太多,感觉被骗,怎么办 JDBC的工作原理是什么? jdbc preparedstatement可以用来进行动态查询吗 简述使用Jdbc实现数据查询的完整步骤 如何剪视频 怎样CUT一部电视剧中的片段?如题 谢谢了 单人cut什么意思 爱剪辑要剪某个综艺的单人cut怎么剪 福州家庭装修谁比较清楚? 油画是什么时候传入中国的 土巴兔装修贷怎么样? 青岛知名的装修公司有哪些? 福州有哪个公司设置外墙干挂石材施工图。。 急需阿~ 长沙装修公司排名前十强有哪些 福州国广一叶怎么样 福州家装 福州永泰县装饰公司排名有没有?我想参考一下。 福州丽居装饰工程有限公司怎么样? 跪求推荐,福州做酒店的装修公司. 福州哪有正在装修的酒店,或者大型的公装正装修的,本人想学室内公装的施工,所以想找工地 热门福州装修设计公司介绍,推荐这4家! jdbc原理 JDBC可以动态的获取数据库里的所有的表吗 java中使用JDBC完成数据库操作的基本步骤是什么? Java里面的JDBC是什么意思啊? jdbc preparedstatement可以动态查询么 java 中使用jdbc怎样实现动态的链接多个数据库?? JDBC如何实现跨数据库的查询 jdbc的JTable中实现一个简单的查询功能 JDBC用户特定条件查询怎么实现 jdbc怎么动态的创建一个数据库? 怎样写一个通用的JDBC查询方法 苹果11怎么不能长截图? 手机充电时显示充电显示充电异常找售后咋回事 18. 在制作PPT时,如何设置动作按钮和超链接? ppt链接中的超链接和动作有什么不同? 通过设置动作按钮和插入超链接来改变幻灯片的播放顺序吗? PPT中 动作设置 和 超链接 的区别?是不是作用是一样的? 要求在做的幻灯片中添加超级链接和动作按钮 请问应该怎么做呀???_百度... 动作按钮和超链接的异同 ppt中动作和超链接的区别