JDBC 的代码逻辑封装

目录

  • JDBC 的代码逻辑封装
    • 1.前言
    • 2.定义统一接口
    • 3. 封装针对用户相关各种操作的类
    • 4.针对于各种操作的封装
    • 5.代码测试
      • 5.1 查询操作
      • 5.2 增加操作
      • 5.3 修改操作
      • 5.4 删除操作
      • 5.5 重置id操作
    • 6. 常见错误

1.前言

实现Jdbc 的二次封装,只需要传入一个sql 语句即可

相关使用

  • 策略模式

  • 工厂模式

定义操作的db操作类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class DbHelper {public static final String driver="com.mysql.cj.jdbc.Driver";public static final String url="jdbc:mysql://localhost:3306/2109books?useUnicode=true&characterEncoding=utf8";public static final String username="root";public static final String password="123456";public static Connection connection;public static Connection getConnection() {if(connection == null) {try {Class.forName(driver);connection = DriverManager.getConnection(url, username, password);} catch (Exception e) {e.printStackTrace();}}return connection;}public static void close(PreparedStatement pst,ResultSet rst) {if (pst != null) {try {pst.close();} catch (Exception e) {e.printStackTrace();}}if (rst != null) {try {rst.close();} catch (Exception e) {e.printStackTrace();}}}}

2.定义统一接口

定义操作的相关同意实现接口,方便后续使用

import java.sql.SQLException;/*** Cardinality interface class* @param <T> request T info* @param <R> response R info*/
public interface InterfaceAnything<T,R>{/*** doAnything* @param info info* @return doAnything* @throws Exception */R doAnything(T info) throws SQLException, Exception;
}

3. 封装针对用户相关各种操作的类

对于 增加/修改/删除的代码相关封装

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DoAnything implements InterfaceAnything<String, Integer> {/*** Pass in the SQL statement and return the return type value of ResultSet object* @param info info* @return ResultSet* @throws SQLException sqlExample*/@Overridepublic Integer doAnything(String info) throws SQLException {System.out.println(info);Connection conn=DbHelper.getConnection();PreparedStatement pst = null;Integer rst = null;try {pst = conn.prepareStatement(info);rst = pst.executeUpdate();         } finally {DbHelper.close(pst, null);conn.close();}return rst;}
}

针对用户花样查询的代码封装

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import enetity.Books;public class SelectAnything implements InterfaceAnything<String, List<List<String>>> {@Overridepublic List<List<String>> doAnything(String sql) throws SQLException {Connection conn = DbHelper.getConnection();List<List<String>> list = new ArrayList<>();PreparedStatement pst = conn.prepareStatement(sql);ResultSet rst = null ;try{rst=pst.executeQuery();while(rst.next()) {int index=1;List<String> strs = new ArrayList<>();do {try {strs.add(rst.getString(index++));} catch (Exception e) {break;}} while (true);list.add(strs);}}finally {DbHelper.close(pst, rst);conn.close();}return list;}
}

4.针对于各种操作的封装

各种常量的封装

public class ActionName {public static final String SELECT_ACTION = "select";public static final String ADD_ACTION = "insert";public static final String REMOVE_ACTION = "delete";public static final String UPDATE_ACTION = "update";public static final String ALTER_ACTION = "alter";
}

各种业务逻辑工具类代码实现

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;public class SqlUntil implements InterfaceAnything<String,InterfaceAnything>{private static SqlUntil sqlUntil;protected static Map<String, InterfaceAnything> map= new HashMap<>();private SqlUntil(){}static{map.put(ActionName.ADD_ACTION,new DoAnything());map.put(ActionName.REMOVE_ACTION,new DoAnything());map.put(ActionName.UPDATE_ACTION,new DoAnything());map.put(ActionName.SELECT_ACTION,new SelectAnything());map.put(ActionName.ALTER_ACTION,new DoAnything());}public static SqlUntil getSqlUntil() throws Exception{sqlUntil = new SqlUntil();return SqlUntil.sqlUntil;}@Overridepublic InterfaceAnything doAnything(String info) throws Exception {// todo sql infoString UpInfo = info.substring(0,info.indexOf(" "));UpInfo=UpInfo.toLowerCase();InterfaceAnything interfaceAnything=map.get(UpInfo);if (interfaceAnything==null) {throw new Exception("SQL statement error, please check your incoming SQL statement");} else {return interfaceAnything;}}}

5.代码测试

5.1 查询操作

代码部分

import java.sql.ResultSet;
import java.util.List;import com.mysql.cj.jdbc.result.ResultSetImpl;import enetity.Books;
import until.BookUntil;public class text {public static void main(String[] args) throws Exception {SqlUntil sqlObject= SqlUntil.getSqlUntil();String sql = "select * from books";InterfaceAnything in=sqlObject.doAnything(sql);List<List<Object>> one = (List<List<Object>>) in.doAnything(sql);for (List<Object> list : one) {for (Object object : list) {System.out.print(object+"\t");}System.out.println();}}
}

输出

27    泰戈尔诗集一    18.00    images/book/book_01.gif    987    0
28    痕记一    22.80    images/book/book_02.gif    989    1
29    天堂之旅一    25.00    images/book/book_03.gif    996    1
30    钱钟书集一    332.50    images/book/book_04.gif    999    1
31    赵俪生高昭—夫妻回忆录    38.00    images/book/book_05.gif    999    0
32    无聊斋    28.00    images/book/book_06.gif    999    1
33    一颗热土豆是一张温馨的床    38.00    images/book/book_07.gif    999    1
34    李戡戡乱记    22.00    images/book/book_08.gif    999    1
35    生生世世未了缘    17.50    images/book/book_09.gif    995    1
36    一生有多少爱    17.50    images/book/book_10.gif    999    0
37    三生三世    11.00    images/book/16451553643252200.jpg    11    0
38    22222    22.00    images/book/16451555584682099.jpg    222    0
39    三生三世2    22.00    images/book/16451638781115412.jpg    22    0
40    及积极    22.00    images/book/16451639358542448.png    17    1
41    可乐    22.00    images/book/16451667622797653.jpg    222    0

5.2 增加操作

代码部分

import java.sql.ResultSet;
import java.util.List;import com.mysql.cj.jdbc.result.ResultSetImpl;import enetity.Books;
import until.BookUntil;public class text {public static void main(String[] args) throws Exception {SqlUntil sqlObject= SqlUntil.getSqlUntil();String sql = "insert into books values(default,1,1,1,1,default)";InterfaceAnything in=sqlObject.doAnything(sql);//   List<Books> list=BookUntil.returnBooks(in.doAnything(sql));/*List<List<Object>> one = (List<List<Object>>) in.doAnything(sql);for (List<Object> list : one) {for (Object object : list) {System.out.print(object+"\t");}System.out.println();}*/int suess=(int) in.doAnything(sql);System.out.println(suess);}
}

输出

insert into books values(default,1,1,1,1,default)
1

5.3 修改操作

代码部分

import java.sql.ResultSet;
import java.util.List;import com.mysql.cj.jdbc.result.ResultSetImpl;import enetity.Books;
import until.BookUntil;public class text {public static void main(String[] args) throws Exception {SqlUntil sqlObject= SqlUntil.getSqlUntil();String sql = "update books set bookname = '2' where bookname = '3'";InterfaceAnything in=sqlObject.doAnything(sql);//   List<Books> list=BookUntil.returnBooks(in.doAnything(sql));/*List<List<Object>> one = (List<List<Object>>) in.doAnything(sql);for (List<Object> list : one) {for (Object object : list) {System.out.print(object+"\t");}System.out.println();}*/int suess=(int) in.doAnything(sql);System.out.println(suess);}
}

控制台输出

update books set bookname = '2' where bookname = '3'
1

5.4 删除操作

代码部分

import java.sql.ResultSet;
import java.util.List;import com.mysql.cj.jdbc.result.ResultSetImpl;import enetity.Books;
import until.BookUntil;public class text {public static void main(String[] args) throws Exception {SqlUntil sqlObject= SqlUntil.getSqlUntil();String sql = "delete from books where bookname = '2'";InterfaceAnything in=sqlObject.doAnything(sql);//   List<Books> list=BookUntil.returnBooks(in.doAnything(sql));/*List<List<Object>> one = (List<List<Object>>) in.doAnything(sql);for (List<Object> list : one) {for (Object object : list) {System.out.print(object+"\t");}System.out.println();}*/int suess=(int) in.doAnything(sql);System.out.println(suess);}
}

控制台输出

delete from books where bookname = '2'
1

5.5 重置id操作

代码实现

package text;public class text2 {public static void main(String[] args) throws Exception {SqlUntil sqlObject= SqlUntil.getSqlUntil();String sql="alter table books auto_increment= 37";InterfaceAnything in=sqlObject.doAnything(sql);int suess=(Integer) in.doAnything(sql);System.out.println(suess);}
}

控制台输出

alter table books auto_increment= 37
11

6. 常见错误

遇到以下类似的错误,为sql语句错误,请到数据库中测试语句,请重新编写 sql语句。

Exception in thread "main" com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '泰戈尔诗集一'at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104)at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1098)at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1046)at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1371)at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1031)at text.DoAnything.doAnything(DoAnything.java:27)at text.DoAnything.doAnything(DoAnything.java:1)at text.text.main(text.java:24)

JDBC 的代码逻辑封装相关推荐

  1. 二、SQL注入使用占位符解决、JDBC工具类、封装

    一.SQL注入使用占位符解决 //使用jdbc发送sql语句, 到数据库tb_user 查询是否有该用户名和密码的用户Connection conn = null;PreparedStatement ...

  2. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[后端篇] 数据库准备 后端搭建 1.快速创建个SpringBoot项目 2.引入依赖 3.编写代码快速生成代码 4.运行代码生成器生成代码 5.编写application.pr ...

  3. 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...

    阿里妹导读:你有没有遇到过这种情况:过几周或者几个月之后,再看到自己写的代码,感觉一团糟,不禁怀疑人生?我们每天都与代码打交道,但当被问道什么是好的代码时,很多人可能会先愣一下,然后给出的回答要么比较 ...

  4. JDBC有这一篇就够了(万字JDBC附代码详解)

    目录: 1.JDBC的本质 2.JDBC的使用步骤 3.DriverManager对象 4.Connectioin对象 5.Statement对象 6.ResultSet对象 7.JDBC工具类 8. ...

  5. QT入门第一天平台使用规则和代码逻辑学习(初学者)

    QT入门第一天平台使用规则和代码逻辑学习 QT学习目的,岗位需求 QT的 应用领域,发展历史 QT下载安装,不同版本QT介绍 新建QT工程 1.集成开发环境介绍 2.新建QT工程 3.QT工程介绍 Q ...

  6. 精读《低代码逻辑编排》

    逻辑编排是用可视化方式描述逻辑,在一般搭建场景中用于代替逻辑描述部分. 更进一步的逻辑编排是前后端逻辑混排,一般出现在一站式 paas 平台,今天就介绍一个全面实现了逻辑编排的 paas 工具 nod ...

  7. SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】

    前后端分离项目快速搭建[前端篇] 后端篇 前端篇 创建vue项目 安装所需工具 开始编码 1.在根目录下添加vue.config.js文件 2.编写main.js 3.编写App.vue 4.编写ax ...

  8. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  9. 技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...

    请求-调用-执行-存储,不论是网站还是APP,这是从代码到应用的运行逻辑,那么区块链世界的Dapp应用是否也会执行这套逻辑?Dapp的代码逻辑与传统app有什么不同? 6月20日,由HiBlock区块 ...

最新文章

  1. python 判断节假日_[宜配屋]听图阁
  2. 前端知识点回顾之重点篇——JavaScript异步机制
  3. DGA短域名(360样本) mark下 下次分析可以参考
  4. flink RPC(akka)
  5. 博客url什么形式_URL的完整形式是什么?
  6. python 近期用到的基础知识汇总(六)
  7. molicode生成vue增删改查功能
  8. python scikit_Python SciKit学习教程
  9. 区块链 DAG分布式账本技术 DAG数据结构和基于区块的数据结构的差别 优势
  10. c++ new操作符(new operator)、operator new、placement new 、operator new[] 及相对应的delete 操作符、operator delete
  11. DIY-希捷硬盘固件问题的解决方法
  12. Android adb shell命令详解及实例
  13. mac忘了密码怎么办_如果忘记Mac密码该怎么办
  14. lintcode1385. 幸运数字8
  15. Android 省电模式 降频吗,开启省电模式会降频吗
  16. 【复盘】记录生产环境问题,因没有及时合并maser
  17. android 内存优化 性能优化
  18. 学习笔记——OFDM仿真课设
  19. sourcetree的使用方法
  20. Oracle忘了保存,Oracle Cloud甲骨文云服务器忘记SSH秘钥或未设置Public key的解决办法...

热门文章

  1. 粤嵌开发板ARM电子相册
  2. 第41部分-Linux x86 64位汇编MMX使用
  3. Privacy Definitions - (alpha, beta)-privacy
  4. 开发租车的APP过程中需要解决哪些问题?
  5. 从 Azure Databricks 访问 Azure Blob 存储
  6. PYQT安装及初始化
  7. 银行卡的卡号号段标识
  8. Atari游戏公司推出两款热门游戏的“区块链版本”
  9. 曼尼托巴大学计算机科学专业怎么样,加拿大曼尼托巴大学优势专业有哪些
  10. 【可信计算】第十次课:TPM密码资源管理(二)