Java基礎(chǔ)開(kāi)發(fā)之JDBC操作數(shù)據(jù)庫(kù)增刪改查,分頁(yè)查詢(xún)實(shí)例詳解
對(duì)數(shù)據(jù)庫(kù)的操作無(wú)非就是增刪改查,其中數(shù)查詢(xún)操作最為復(fù)雜,所以將查詢(xún)單獨(dú)講解,我這里用的Mysql數(shù)據(jù)庫(kù)
增刪改查操作
分頁(yè)查詢(xún)操作
1.查詢(xún)結(jié)果以list返回
2.查詢(xún)結(jié)果以jsonArray返回
3.查詢(xún)總記錄條數(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è)查詢(xún)默認(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);
}
查詢(xún)操作
1.查詢(xún)結(jié)果以list返回
/**
* 查詢(xún)結(jié)果以list返回
* @param pageIndex 頁(yè)數(shù)
* @param pageSize 每頁(yè)記錄條數(shù)
* @param attachTableName 在結(jié)果集中是否給key值附加表名,例如:user.id,與id
* @param sql 查詢(xún)語(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è)置最大查詢(xún)到第幾條記錄
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查詢(xún)
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.查詢(xún)結(jié)果以jsonArray返回
/**
* 查詢(xún)結(jié)果以ArrayList返回
* @param 在結(jié)果集中是否給key值附加表名,例如:user.id,與id
* @param sql 查詢(xún)語(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è)置最大查詢(xún)到第幾條記錄
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查詢(xún)
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.查詢(xún)總記錄條數(shù)
/**
* 查詢(xún)記錄條數(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)用查詢(xún)總記錄條數(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è)查詢(xún),如果想了解更多關(guān)于這方面的文章大家可以查看下面的相關(guān)鏈接
- Java的MyBatis框架中實(shí)現(xiàn)多表連接查詢(xún)和查詢(xún)結(jié)果分頁(yè)
- Java操作MongoDB模糊查詢(xún)和分頁(yè)查詢(xún)
- Java分頁(yè)查詢(xún)--分頁(yè)顯示(實(shí)例講解)
- 如何用java實(shí)現(xiàn)分頁(yè)查詢(xún)
- java web實(shí)現(xiàn)分頁(yè)查詢(xún)實(shí)例方法
- JAVA代碼實(shí)現(xiàn)MongoDB動(dòng)態(tài)條件之分頁(yè)查詢(xún)
- 詳述 DB2 分頁(yè)查詢(xún)及 Java 實(shí)現(xiàn)的示例
- datatables 帶查詢(xún)條件java服務(wù)端分頁(yè)處理實(shí)例
- 新聞列表的分頁(yè)查詢(xún)java代碼實(shí)現(xiàn)
- Java實(shí)現(xiàn)分頁(yè)查詢(xún)功能
相關(guān)文章
基于HttpServletRequest 相關(guān)常用方法的應(yīng)用
本篇文章小編為大家介紹,基于HttpServletRequest 相關(guān)常用方法的應(yīng)用,需要的朋友參考下2013-04-04
Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建
今天小編就為大家分享一篇關(guān)于Java基礎(chǔ)高級(jí)綜合練習(xí)題撲克牌的創(chuàng)建,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
springboot+webmagic實(shí)現(xiàn)java爬蟲(chóng)jdbc及mysql的方法
今天小編就為大家分享一篇springboot+webmagic實(shí)現(xiàn)java爬蟲(chóng)jdbc及mysql的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
java進(jìn)階解析Springboot上傳excel存入數(shù)據(jù)庫(kù)步驟
項(xiàng)目需要,寫(xiě)了一個(gè),批量導(dǎo)入的接口。因?yàn)樾枰褂胑xcel去批量導(dǎo)入數(shù)據(jù),所以寫(xiě)了一個(gè)例子,經(jīng)過(guò)測(cè)試已經(jīng)可以用于實(shí)際開(kāi)發(fā),這里記錄一下2021-09-09
SpringBoot+WebSocket搭建簡(jiǎn)單的多人聊天系統(tǒng)
WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議。這是一種比較官方的說(shuō)法,簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是,在一次TCP連接中,通信的雙方可以相互通信。這篇文章主要介紹了SpringBoot+WebSocket搭建簡(jiǎn)單的多人聊天系統(tǒng),需要的朋友可以參考下2019-10-10
Java實(shí)現(xiàn)調(diào)用第三方相關(guān)接口
最近在做一個(gè)項(xiàng)目,需要調(diào)用第三方接口,本文主要介紹了Java實(shí)現(xiàn)調(diào)用第三方相關(guān)接口,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

