Java JDBC操作Mysql数据库增删改查,分页查询实例详解(源码)

查询操作

1.查询结果以list返回

/**
   * 查询结果以list返回
   * @param pageIndex 页数
   * @param pageSize 每页记录条数
   * @param attachTableName 在结果集中是否给key值附加表名,例如:user.id,与id
   * @param sql 查询语句 例如:"select u.id,u.name,u.sex,u.depart_id AS departId,d.* from user u,depart d where u.depart_id=d.id"
   * @param values
   * @throws SQLException 
   */
  private List<Map<String, Object>> queryList(int pageIndex,int pageSize,boolean attachTableName,String sql,Object... values) throws SQLException{
    Connection conn = null;
    PreparedStatement pStmt = null;
    List<Map<String, Object>> dataList = null;
    //校验参数
    if(pageIndex <= 0){
      pageIndex = 1;
    }
    if(pageSize <= 0){
      pageSize = Config.PAGE_SIZE_DEFAULT;
    }
    conn = this.getConnection(conn);
    pStmt = conn.prepareStatement(sql);
    //设置参数
    if(pStmt != null && values != null && values.length > 0){
      for (int i = 0; i < values.length; i++) {
        pStmt.setObject(i+1, values[i]);
      }
    }
    //设置最大查询到第几条记录
    pStmt.setMaxRows(pageIndex*pageSize);
    ResultSet rs = pStmt.executeQuery();
    //游标移动到要输出的第一条记录
    rs.relative((pageIndex-1)*pageSize);
    if(rs != null){
      try {
        dataList = new ArrayList<Map<String,Object>>();
        ResultSetMetaData md = rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等 
        //遍历结果集
        while(rs.next()){
          Map<String, Object> map = new LinkedHashMap();
          for (int i = 1; i <= md.getColumnCount(); i++) {
            map.put(attachTableName?(formatTableName(md.getTableName(i))+"."+md.getColumnLabel(i)):(md.getColumnLabel(i)), rs.getObject(i));
          }
          dataList.add(map);
        }
      }finally{
        if(rs != null){
          rs.close();
        }
        if(pStmt != null){
          pStmt.close();
        }
        if (conn != null) {
          this.closeConnection(conn);
        }
      }
    }
    return dataList;
  }

调用list查询

public static void queryList(){
    String sql = "select u.*,d.* from user u,depart d where u.depart_id=d.id";
    try {
      List<Map<String, Object>> dataList = baseImp.queryForListAttachTableName(2,2,sql, null);
//     List<Map<String, Object>> dataList = baseImp.queryForList(2,2,sql, null);
      for (Map<String, Object> map : dataList) {
        for (String key : map.keySet()) {
          System.out.print(key+"="+map.get(key)+" ");
        }
        System.out.println();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

结果

Java   JDBC操作Mysql数据库增删改查,分页查询实例详解(源码)

2.查询结果以jsonArray返回

/**
   * 查询结果以ArrayList返回
   * @param 在结果集中是否给key值附加表名,例如:user.id,与id
   * @param sql 查询语句 例如:"select u.id,u.name,u.sex,u.depart_id AS departId,d.* from user u,depart d where u.depart_id=d.id"
   * @param values
   * @throws SQLException 
   */
  private JSONArray queryJsonArray(int pageIndex,int pageSize,boolean attachTableName,String sql,Object... values) throws SQLException{
    JSONArray jsonArray = null;
    Connection conn = null;
    PreparedStatement pStmt = null;
    //校验参数
    if(pageIndex <= 0){
      pageIndex = 1;
    }
    if(pageSize <= 0){
      pageSize = Config.PAGE_SIZE_DEFAULT;
    }
    conn = this.getConnection(conn);
    pStmt = conn.prepareStatement(sql);
    //设置参数
    if(pStmt != null && values != null && values.length > 0){
      for (int i = 0; i < values.length; i++) {
        pStmt.setObject(i+1, values[i]);
      }
    }
    //设置最大查询到第几条记录
    pStmt.setMaxRows(pageIndex*pageSize);
    ResultSet rs = pStmt.executeQuery();
    //游标移动到要输出的第一条记录
    rs.relative((pageIndex-1)*pageSize);
    if(rs != null){
      try {
        jsonArray = new JSONArray();
        ResultSetMetaData md = rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等 
        //遍历结果集
        while(rs.next()){
          JSONObject jsonObject = new JSONObject();
          for (int i = 1; i <= md.getColumnCount(); i++) {
            jsonObject.put(attachTableName?(formatTableName(md.getTableName(i))+"."+md.getColumnLabel(i)):(md.getColumnLabel(i)), rs.getObject(i)+"");
          }
          jsonArray.add(jsonObject);
        }
        }finally{
          if(rs != null){
            rs.close();
          }
          if(pStmt != null){
            pStmt.close();
          }
          if (conn != null) {
            this.closeConnection(conn);
          }
        }
    }
    return jsonArray;
  }

调用jsonArray查询

public static void queryJsonArray(){
//   String sql = "select * from user u";
    String sql = "select u.*,d.* from user u,depart d where u.depart_id=d.id";
//   String sql = "select u.id AS uid,u.name,u.sex,u.depart_id AS departId,d.name from user u,depart d where u.depart_id=d.id";
//   String sql = "select u.id,u.name,u.sex,u.depart_id AS departId,d.* from user u,depart d where u.depart_id=d.id";
    try {
      JSONArray jsonArray = baseImp.queryForJsonArrayAttachTableName(2,2,sql, null);
//     JSONArray jsonArray = baseImp.queryForJsonArray(sql, null);
      System.out.println(jsonArray.toString());
      for (int i = 0; i < jsonArray.size(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        Iterator<?> iterator = jsonObject.keys();
        Object key = null;
        while (iterator.hasNext()) {
          key = iterator.next();
          System.out.print(key+" "+jsonObject.get(key)+" ");
        }
        System.out.println();
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

结果

Java   JDBC操作Mysql数据库增删改查,分页查询实例详解(源码)

[{"user.id":"4","user.name":"王五","user.sex":"0","user.depart_id":"3","depart.id":"3","depart.name":"研发部","depart.desc":"这是研发部"},{"user.id":"5","user.name":"赵六","user.sex":"1","user.depart_id":"1","depart.id":"1","depart.name":"测试部","depart.desc":"这是测试部"}]
user.id 4 user.name 王五 user.sex 0 user.depart_id 3 depart.id 3 depart.name 研发部 depart.desc 这是研发部 
user.id 5 user.name 赵六 user.sex 1 user.depart_id 1 depart.id 1 depart.name 测试部 depart.desc 这是测试部

3.查询总记录条数

/**
   * 查询记录条数
   * @param sql 例如:"select count(*) from user where xxx"
   * @param values
   * @throws SQLException 
   */
  public int queryCount(String sql,Object... values) throws SQLException{
    int count = -1;
    Connection conn = null;
    PreparedStatement pStmt = null;
    conn = this.getConnection(conn);
    pStmt = conn.prepareStatement(sql);
    //设置参数
    if(pStmt != null && values != null && values.length > 0){
      for (int i = 0; i < values.length; i++) {
        pStmt.setObject(i+1, values[i]);
      }
    }
    ResultSet rs = pStmt.executeQuery();
    if(rs != null){
      try {
        while(rs.next()){
          count = rs.getInt(1);
        }
      }finally{
        if(rs != null){
          rs.close();
        }
        if(pStmt != null){
          pStmt.close();
        }
        if (conn != null) {
          this.closeConnection(conn);
        }
      }
    }
    return count;
  }

调用查询总记录条数

public static void queryCount(){
    String sql = "select count(*) from user u";
    try {
      System.out.println("count="+baseImp.queryCount(sql, null));
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }

结果

Java   JDBC操作Mysql数据库增删改查,分页查询实例详解(源码)

这就是Java中JDBC对mysql数据库进行增删改查操作与分页查询的全部内容,希望对你有所帮助。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/4929.html

(0)
江山如画的头像江山如画管理团队
上一篇 2020年2月19日 下午7:24
下一篇 2020年2月20日 下午5:59

99%的人还看了以下文章

  • JS截取字符串方法详解:前面/中间/后面

    JS截取字符串方法,JS的match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 js截取字符串中间的内容 var str = “aaabbbcccdddeeefff”; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee js截取某个字符串前面的内容 var…

    2023年1月5日
    3.8K0
  • 第一个Tkinter程序

    Tkinter(Python GUI编程)从入门到精通(一) 上一篇文章介绍什么是Tkinter?tkinter的优缺点,tkinter的开发工具。 今天我们在上一篇的基础上,开始给主窗口添加文本、按钮,并给按钮绑定一个事件,点击按钮弹出一个消息窗口。 创建label label=tk.Label(root,text=”hello GUI&#82…

    2022年8月25日
    4750
  • 两个简单的Pycharm激活方法分享

    一、Pycharm激活码激活 优点:Window、Mac、Ubantu都稳定有效,关键是这种激活方式不会产生其他影响 缺点:需要修改hosts文件 修改hosts文件 将0.0.0.0 account.jetbrains.com添加到hosts文件最后,注意hosts文件无后缀,如果遇到无法修改或权限问题,可以采用覆盖的方法去替换hosts文件 修改后请检查…

    2020年3月14日
    2.5K0
  • 单元测试工具JUnit介绍及使用,单元测试快速入门教程五

     Junit框架 1.TestCase(测试用例) 对每个需要测试的类,都要定义一个测试用例,包含一个或多个测试类,在Junit中指的是包含那些带有@Test注解的方法的类。 Junit支持两种运行单个测试的方法:静态和动态的方法。 (1)静态的方法就是覆盖TestCase类的runTest()方法,一般采用内部类的方式创建一个测试实例。 TestCase …

    2018年4月18日 编程开发
    4.5K0
  • 推荐!Django 新手入门图文教程

    一、Django简介 百度百科:一个开放源代码的Web框架,由Python语言编写…… 重点:一个大而全的框架,啥都替你考虑好了。 1. web框架介绍 具体介绍Django之前,必须先介绍Web框架的概念。 Web框架: 别人已经设定好的一个Web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。 一般Web框架的…

    2023年1月24日 编程开发
    3710
  • HTTP错误 403.14 服务器配置为不列出此目录内容

    开发一个企业网站,使用ASP技术,在本地通过IIS管理器调试,出现 如下问题: HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容 解决方法: 在”功能视图“,中找到”目录浏览“,双击进入 在目录浏览右侧操作中选择”启用“! 这时再浏览网站,可以看到已经不报错了,但是网站是以文件目录的形式展现的! 这是…

    2018年7月3日 编程开发
    2.8K0

发表回复

登录后才能评论