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)鏈接
- Java的MyBatis框架中實(shí)現(xiàn)多表連接查詢和查詢結(jié)果分頁(yè)
- Java操作MongoDB模糊查詢和分頁(yè)查詢
- Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)
- 如何用java實(shí)現(xiàn)分頁(yè)查詢
- java web實(shí)現(xiàn)分頁(yè)查詢實(shí)例方法
- JAVA代碼實(shí)現(xiàn)MongoDB動(dòng)態(tài)條件之分頁(yè)查詢
- 詳述 DB2 分頁(yè)查詢及 Java 實(shí)現(xiàn)的示例
- datatables 帶查詢條件java服務(wù)端分頁(yè)處理實(shí)例
- 新聞列表的分頁(yè)查詢java代碼實(shí)現(xiàn)
- Java實(shí)現(xiàn)分頁(yè)查詢功能
相關(guān)文章
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-10Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面(前后端分離)
本文主要介紹了Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面,可以實(shí)現(xiàn)簡(jiǎn)單的查詢,刪除,修改,和添加用戶信息功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Mybatis傳遞多個(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-06JavaWeb動(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)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02MybatisPlus字段類(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