MySQL原生查询:查不到数据是如何判断的?
2021/10/25 19:14:49
本文主要是介绍MySQL原生查询:查不到数据是如何判断的?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 原生查询
MySQL原生查询,结果存放在集合java.sql.ResultSet中。
当查询的查询的数据不存在时,ResultSet集合为空。
不会走ResultSet.next逻辑。
封装的数据为空。
因此,使用原生查询时,判断是否查到数据,根据封装的对象是否为空即可。
如,将ResultSet遍历的结果存储在Map中,判断Map是否为空即可。
2 测试
2.1 数据库数据
2.2 样例
查询user_id为0x007的数据,不存在。
不走rs.next()逻辑。
package com.monkey.java_study.functiontest; import com.monkey.java_study.database.DatabaseConnectionFactory; import com.monkey.java_study.database.IDatabaseConnection; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.Test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import static com.monkey.java_study.common.constant.DatabaseConstant.MY_SQL; /** * 数据查询测试. * * @author xindaqi * @date 2021-10-22 11:08 */ public class DataQueryFromMySQLTest { private static final Logger logger = LogManager.getLogger(DataQueryFromMySQLTest.class); @Test public void queryTest() { DatabaseConnectionFactory databaseConnectionFactory = new DatabaseConnectionFactory(); IDatabaseConnection databaseConnection = databaseConnectionFactory.databaseConnection(MY_SQL); Connection conn = databaseConnection.databaseLink(); Statement stmt = null; try { Map<String, String> userIdAndStatusMap = new HashMap<>(3); Connection connUse = conn; stmt = connUse.createStatement(); String userId = "0x007"; String sql = "SELECT status FROM db_monkey_run.tb_sys_user WHERE user_id=" + "'" + userId + "'" + "LIMIT 1"; ResultSet rs = stmt.executeQuery(sql); int resultSize = rs.getFetchSize(); logger.info(">>>>>>>>>>结果数量:{}", resultSize); logger.info(">>>>>>>>>>Result set:{}", rs); while (rs.next()) { Integer status = rs.getInt("status"); logger.info(">>>>>>>>>>Status:{}", status); String statusStr = String.valueOf(status); logger.info(">>>>>>>>>>String status: {}", statusStr); userIdAndStatusMap.put(userId, statusStr); } if(userIdAndStatusMap.isEmpty()) { logger.info(">>>>>>>>>>未查到数据,Map:{}", userIdAndStatusMap); } else { logger.info(">>>>>>>>>>查到数据,Map:{}", userIdAndStatusMap); } rs.close(); } catch (SQLException se) { throw new RuntimeException(se); } catch (Exception e) { throw new RuntimeException(e); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException se1) { throw new RuntimeException(se1); } } } }
测试结果:
由测试结果可是,当查不到数据时,RestultSet存储的数据为0,跳过re.next()逻辑,因此,判断是否查到数据,不可以在rs.next中判断,应该在映射的结果中判断。
3 小结
- MySQL原生查询,查不到数据,ResultSet对象存在,
只是没有有效数据; - 将ResultSet结果映射到对象时,
不可通过rs.next()中的逻辑判断是否查到数据,
应该通过判断映射的对象是否为空判断是否查到结果; - 如将查询结果映射到Map,判断Map是否为空,即可判断是否查到数据。
这篇关于MySQL原生查询:查不到数据是如何判断的?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程