亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java基礎(chǔ)開(kāi)發(fā)之JDBC操作數(shù)據(jù)庫(kù)增刪改查,分頁(yè)查詢實(shí)例詳解

 更新時(shí)間:2020年02月19日 15:51:24   作者:spaceAt  
這篇文章主要介紹了Java基礎(chǔ)開(kāi)發(fā)之JDBC操作數(shù)據(jù)庫(kù)增刪改查,分頁(yè)查詢實(shí)例詳解,需要的朋友可以參考下

對(duì)數(shù)據(jù)庫(kù)的操作無(wú)非就是增刪改查,其中數(shù)查詢操作最為復(fù)雜,所以將查詢單獨(dú)講解,我這里用的Mysql數(shù)據(jù)庫(kù)

增刪改查操作

分頁(yè)查詢操作

1.查詢結(jié)果以list返回

2.查詢結(jié)果以jsonArray返回

3.查詢總記錄條數(shù)

先看一下相關(guān)的配置信息

public static final String USER_NAME = "root";
public static final String PWD = "123456789";
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/web_demon";
/** 分頁(yè)查詢默認(rèn)每頁(yè)記錄條數(shù) */
public static final int PAGE_SIZE_DEFAULT = 10;

增刪改操作

獲取數(shù)據(jù)庫(kù)連接對(duì)象

/**
   * 獲取數(shù)據(jù)庫(kù)連接
   * @return 數(shù)據(jù)庫(kù)連接對(duì)象
   */
  public Connection getConnection(Connection conn) {
    if(conn == null){
      try {
        Class.forName(Config.DRIVER);
        conn = DriverManager.getConnection(Config.URL, Config.USER_NAME, Config.PWD);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return conn;
  }

封裝增刪改操作

/**
   * 新增,刪除,插入操作
   * @param sql 執(zhí)行的sql語(yǔ)句
   *      例如:新增語(yǔ)句 "insert into user (name,sex) values (?,?)";
   *       刪除語(yǔ)句  "delete from user where id=?";
   *       修改語(yǔ)句  "update user set name=?,sex=? where id=? and sex=?";
   * @param values 對(duì)應(yīng)的參數(shù)值
   * @return 影響條數(shù),-1為異常
   */
  private int execute(String sql,Object... values){
    Connection conn = null;
    PreparedStatement pStmt = null;
    try {
      conn = this.getConnection(conn);
      pStmt = conn.prepareStatement(sql);
      //設(shè)置參數(shù)
      if(pStmt != null && values != null && values.length > 0){
        for (int i = 0; i < values.length; i++) {
          pStmt.setObject(i+1, values[i]);
        }
      }
      int i =pStmt.executeUpdate();
      return i;
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (conn != null) {
        this.closeConnection(conn);
      }
    }
    return -1;
  }

調(diào)用方法

//新增
public static void insert(){
    String sql = "insert into user (name,sex) values (?,?)";
    Object[] values = new Object[]{"李四",0};
    int res = baseImp.execute(sql, values);
    System.out.println("insert res="+res);
  }
//刪除
public static void delete(){
    String sql = "delete from user where id=?";
    Object[] values = new Object[]{2};
    int res = baseImp.execute(sql, values);
    System.out.println("delete res="+res);
  }
//更新
public static void update(){
    String sql = "update user set name=?,sex=? where id=? and sex=?";
    Object[] values = new Object[]{"張三",1,1,0};
    int res = baseImp.execute(sql, values);
    System.out.println("update res="+res);
  }

查詢操作

1.查詢結(jié)果以list返回

/**
   * 查詢結(jié)果以list返回
   * @param pageIndex 頁(yè)數(shù)
   * @param pageSize 每頁(yè)記錄條數(shù)
   * @param attachTableName 在結(jié)果集中是否給key值附加表名,例如:user.id,與id
   * @param sql 查詢語(yǔ)句 例如:"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;
    //校驗(yàn)參數(shù)
    if(pageIndex <= 0){
      pageIndex = 1;
    }
    if(pageSize <= 0){
      pageSize = Config.PAGE_SIZE_DEFAULT;
    }
    conn = this.getConnection(conn);
    pStmt = conn.prepareStatement(sql);
    //設(shè)置參數(shù)
    if(pStmt != null && values != null && values.length > 0){
      for (int i = 0; i < values.length; i++) {
        pStmt.setObject(i+1, values[i]);
      }
    }
    //設(shè)置最大查詢到第幾條記錄
    pStmt.setMaxRows(pageIndex*pageSize);
    ResultSet rs = pStmt.executeQuery();
    //游標(biāo)移動(dòng)到要輸出的第一條記錄
    rs.relative((pageIndex-1)*pageSize);
    if(rs != null){
      try {
        dataList = new ArrayList<Map<String,Object>>();
        ResultSetMetaData md = rs.getMetaData(); //得到結(jié)果集(rs)的結(jié)構(gòu)信息,比如字段數(shù)、字段名等 
        //遍歷結(jié)果集
        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;
  }

調(diào)用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();
    }
  }

結(jié)果

2.查詢結(jié)果以jsonArray返回

/**
   * 查詢結(jié)果以ArrayList返回
   * @param 在結(jié)果集中是否給key值附加表名,例如:user.id,與id
   * @param sql 查詢語(yǔ)句 例如:"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;
    //校驗(yàn)參數(shù)
    if(pageIndex <= 0){
      pageIndex = 1;
    }
    if(pageSize <= 0){
      pageSize = Config.PAGE_SIZE_DEFAULT;
    }
    conn = this.getConnection(conn);
    pStmt = conn.prepareStatement(sql);
    //設(shè)置參數(shù)
    if(pStmt != null && values != null && values.length > 0){
      for (int i = 0; i < values.length; i++) {
        pStmt.setObject(i+1, values[i]);
      }
    }
    //設(shè)置最大查詢到第幾條記錄
    pStmt.setMaxRows(pageIndex*pageSize);
    ResultSet rs = pStmt.executeQuery();
    //游標(biāo)移動(dòng)到要輸出的第一條記錄
    rs.relative((pageIndex-1)*pageSize);
    if(rs != null){
      try {
        jsonArray = new JSONArray();
        ResultSetMetaData md = rs.getMetaData(); //得到結(jié)果集(rs)的結(jié)構(gòu)信息,比如字段數(shù)、字段名等 
        //遍歷結(jié)果集
        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;
  }

調(diào)用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();
    }
  }

結(jié)果

[{"user.id":"4","user.name":"王五","user.sex":"0","user.depart_id":"3","depart.id":"3","depart.name":"研發(fā)部","depart.desc":"這是研發(fā)部"},{"user.id":"5","user.name":"趙六","user.sex":"1","user.depart_id":"1","depart.id":"1","depart.name":"測(cè)試部","depart.desc":"這是測(cè)試部"}]
user.id 4 user.name 王五 user.sex 0 user.depart_id 3 depart.id 3 depart.name 研發(fā)部 depart.desc 這是研發(fā)部 
user.id 5 user.name 趙六 user.sex 1 user.depart_id 1 depart.id 1 depart.name 測(cè)試部 depart.desc 這是測(cè)試部

3.查詢總記錄條數(shù)

/**
   * 查詢記錄條數(shù)
   * @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);
    //設(shè)置參數(shù)
    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;
  }

調(diào)用查詢總記錄條數(shù)

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();
    }
  }

結(jié)果

至此我們介紹完了Java基礎(chǔ)開(kāi)發(fā)中JDBC對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作與分頁(yè)查詢,如果想了解更多關(guān)于這方面的文章大家可以查看下面的相關(guān)鏈接

相關(guān)文章

  • 詳解Java設(shè)計(jì)模式——迭代器模式

    詳解Java設(shè)計(jì)模式——迭代器模式

    這篇文章主要介紹了Java設(shè)計(jì)模式——迭代器模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 堆排序算法的講解及Java版實(shí)現(xiàn)

    堆排序算法的講解及Java版實(shí)現(xiàn)

    這篇文章主要介紹了堆排序算法的講解及Java版實(shí)現(xiàn),堆排序基于堆這種數(shù)據(jù)結(jié)構(gòu),在本文中對(duì)堆的概念也有補(bǔ)充介紹,需要的朋友可以參考下
    2016-05-05
  • Java 代碼實(shí)例解析設(shè)計(jì)模式之監(jiān)聽(tīng)者模式

    Java 代碼實(shí)例解析設(shè)計(jì)模式之監(jiān)聽(tīng)者模式

    所謂監(jiān)聽(tīng)者模式,我理解的是構(gòu)建一個(gè)容器存放所有被監(jiān)聽(tīng)的線程或?qū)ο?,監(jiān)聽(tīng)每個(gè)線程或?qū)ο蟀l(fā)生的變化,若某個(gè)線程或?qū)ο笥|發(fā)指定規(guī)則,那么則對(duì)所有被監(jiān)聽(tīng)的線程或?qū)ο蟾鶕?jù)業(yè)務(wù)需要做處理
    2021-10-10
  • Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面(前后端分離)

    Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面(前后端分離)

    本文主要介紹了Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面,可以實(shí)現(xiàn)簡(jiǎn)單的查詢,刪除,修改,和添加用戶信息功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Mybatis傳遞多個(gè)參數(shù)進(jìn)行SQL查詢的用法

    Mybatis傳遞多個(gè)參數(shù)進(jìn)行SQL查詢的用法

    本文給大家介紹Mybatis傳遞多個(gè)參數(shù)進(jìn)行SQL查詢的用法的相關(guān)知識(shí),本文還給大家介紹了mybatis通過(guò)Map傳遞多個(gè)參數(shù)和JavaBean傳遞多個(gè)參數(shù),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • JavaWeb動(dòng)態(tài)導(dǎo)出Excel可彈出下載

    JavaWeb動(dòng)態(tài)導(dǎo)出Excel可彈出下載

    這篇文章主要介紹了JavaWeb動(dòng)態(tài)導(dǎo)出Excel,對(duì)Excel可彈出進(jìn)行下載操作,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題

    解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題

    這篇文章主要介紹了解決IDEA占用C盤(pán)空間過(guò)大的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • SpringCloud使用logback日志框架教程詳解

    SpringCloud使用logback日志框架教程詳解

    Logback是一個(gè)功能強(qiáng)大的日志框架,它是一個(gè)基于slf4j的日志系統(tǒng),提供了可靠的日志服務(wù),比log4j更快,更靈活,更容易使用。本文將教會(huì)你快速讓你的項(xiàng)目集成logback日志框架,需要的朋友可以參考下
    2023-05-05
  • spring中@Reference注入為空的解決方法

    spring中@Reference注入為空的解決方法

    今天上線遇到了問(wèn)題,所以抽空記錄一下,本文主要介紹了spring中@Reference注入為空的解決方法,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • MybatisPlus字段類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)示例

    MybatisPlus字段類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)示例

    本文主要介紹了MybatisPlus如何完成字段類(lèi)型轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論