• JDBC005--使用java来编写查询同一张表的通用代码


    目录

    代码效果展示 

    对应数据表的java类

     编写通用的查询方法

    在主方法中使用


     

    在jdbc中的数据表增删改查中,查找是相对复杂一些的操作,虽然复杂但是不难。我们这里的通用指的是当我们在同一张表格进行查询时,无论是查询的字段名,查询的条件虽然不同,但是只要使用了我们写好的通用查询方法,都可以查询出来结果集,如下:

    代码效果展示 

    1,当我们使用stu_name作为查询的条件时,查询到的结果集为:

     2,当我们使用的是stu_id作为查询的条件,且查询的字段数更加多时,结果集如下:

     如上,我们可以看到,无论是字段数,字段名或者是查询条件虽然有所不同,但是依旧可以返回我们的结果集。现在我们一起去编写针对同一张数据表的查询代码:

    对应数据表的java类

     无论是查询还是增删改操作,都或多或少的会有ORM(对象联系映射)模式的应用。使用该模式可以方便我们对数据表中的记录进行相关的操作。因此我们最好将我们创建的java类中的属性与我们数据表中的所有字段名一一对应(一个都不落):

     之后再去创建公有的方法来设置及获取属性值,重写toString方法和编写有参构造方法及无参构造方法,代码如下:

    1. public class QueryBean {
    2. private int stu_id;
    3. private String stu_name;
    4. private int stu_pai;
    5. private double stu_score;
    6. private double stu_get1;
    7. private double stu_get2;
    8. private double stu_total;
    9. private int sch_id;
    10. public double getStu_get1() {
    11. return stu_get1;
    12. }
    13. public void setStu_get1(double stu_get1) {
    14. this.stu_get1 = stu_get1;
    15. }
    16. public double getStu_get2() {
    17. return stu_get2;
    18. }
    19. public void setStu_get2(double stu_get2) {
    20. this.stu_get2 = stu_get2;
    21. }
    22. public double getStu_total() {
    23. return stu_total;
    24. }
    25. public void setStu_total(double stu_total) {
    26. this.stu_total = stu_total;
    27. }
    28. public int getSch_id() {
    29. return sch_id;
    30. }
    31. public void setSch_id(int sch_id) {
    32. this.sch_id = sch_id;
    33. }
    34. public QueryBean() {}
    35. public int getStu_id() {
    36. return stu_id;
    37. }
    38. public void setStu_id(int stu_id) {
    39. this.stu_id = stu_id;
    40. }
    41. public String getStu_name() {
    42. return stu_name;
    43. }
    44. public void setStu_name(String stu_name) {
    45. this.stu_name = stu_name;
    46. }
    47. public int getStu_pai() {
    48. return stu_pai;
    49. }
    50. public void setStu_pai(int stu_pai) {
    51. this.stu_pai = stu_pai;
    52. }
    53. public double getStu_score() {
    54. return stu_score;
    55. }
    56. public void setStu_score(double stu_score) {
    57. this.stu_score = stu_score;
    58. }
    59. public QueryBean(int stu_id, String stu_name, int stu_pai, double stu_score, double stu_get1, double stu_get2,
    60. double stu_total, int sch_id) {
    61. super();
    62. this.stu_id = stu_id;
    63. this.stu_name = stu_name;
    64. this.stu_pai = stu_pai;
    65. this.stu_score = stu_score;
    66. this.stu_get1 = stu_get1;
    67. this.stu_get2 = stu_get2;
    68. this.stu_total = stu_total;
    69. this.sch_id = sch_id;
    70. }
    71. @Override
    72. public String toString() {
    73. return "QueryBean [stu_id=" + stu_id + ", stu_name=" + stu_name + ", stu_pai=" + stu_pai + ", stu_score="
    74. + stu_score + ", stu_get1=" + stu_get1 + ", stu_get2=" + stu_get2 + ", stu_total=" + stu_total
    75. + ", sch_id=" + sch_id + "]";
    76. }
    77. }

     编写通用的查询方法

    首先我们还是需要经过固有的几个步骤:

    1. 连接数据库
    2. 编写sql语句
    3. 创建预处理对象
    4. 填充sql语句里面的占位符
    5. 执行预处理对象【需要注意的是,在查询时的预处理对象需要返回结果集,因此不是调用excute方法,而是excuteQuery方法,并返回ResultSet,结果集对象】
    6. 创建结果集元数据:结果集元数据主要是为了获取到我们的数据表中的列(字段)数,列(字段)名,列(字段)的值

    代码如下:

    1. public static QueryBean getQuery(String sql,Object...args) throws Exception {
    2. Connection conn=JdbcUtils.getConnection();
    3. PreparedStatement ps=conn.prepareStatement(sql);
    4. //填充占位符
    5. for(int i=0;i
    6. ps.setObject(i+1, args[i]);
    7. }
    8. ResultSet rs=ps.executeQuery();
    9. ResultSetMetaData rsmd=rs.getMetaData(); //获取到结果集的元数据
    10. int colunmCount=rsmd.getColumnCount();
    11. if(rs.next()) { //如果找到了匹配的,就执行该代码块
    12. QueryBean student=new QueryBean();
    13. for(int i=0;i//遍历要显示的列数
    14. String columnName =rsmd.getColumnName(i+1);
    15. Object columnValue=rs.getObject(i+1);
    16. Field field=QueryBean.class.getDeclaredField(columnName); //使用java的反射机制
    17. field.setAccessible(true);
    18. field.set(student,columnValue);
    19. }
    20. return student; //返回我们的对象
    21. }
    22. return null; //如果没有匹配到的,统一使用该字段类型的默认初始化值进行赋值
    23. }
    24. }

    在主方法中使用

    编写好后,我们就可以在主方法中进行调用和使用:

    1. public class Query1 {
    2. public static void main(String[] args) {
    3. PreparedStatement ps=null;
    4. ResultSet rs=null;
    5. Connection conn=null;
    6. try {
    7. conn=JdbcUtils.getConnection(); //自定义的通用数据库
    8. String sql="SELECT stu_id,stu_name,stu_pai,stu_score FROM 20student WHERE stu_id=?";
    9. QueryBean student=JdbcUtils.getQuery(sql,1); //调用我们的查询方法
    10. System.out.println(student); //打印我们的对象
    11. } catch (Exception e) {
    12. e.printStackTrace();
    13. }finally {
    14. JdbcUtils.CloseResource(conn, ps,rs); //关闭资源
    15. }
    16. }
    17. }

    如上我们只需要编写三个java文件即可实现简单的数据库查询操作,如果有问题的请在评论区留言。

  • 相关阅读:
    详细了解网络通信流程、协议组成、编码方式、数据传输方式和途径、Http 协议的编码、cookie的使用和提取路径
    Java 手机上传图片打水印时,图片被翻转90度
    LeetCode刷题(python版)——Topic60排列序列
    【MySQL】使用C/C++访问MySQL
    SpringCloud - OpenFeign 参数传递和响应处理(全网最详细)
    【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化+完美使用
    Mac使用本地docker,在IDEA进行本地容器化部署、启动
    解决ConfigurationBuilder未包含“SetBasePath”的定义
    欢迎大家关注我的个人公众号-这个豆包有点粘
    一站式师生返校管理系统,提高防疫效率
  • 原文地址:https://blog.csdn.net/weixin_53046747/article/details/126503259