JDBC 的代码逻辑封装
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 的代码逻辑封装相关推荐
- 二、SQL注入使用占位符解决、JDBC工具类、封装
一.SQL注入使用占位符解决 //使用jdbc发送sql语句, 到数据库tb_user 查询是否有该用户名和密码的用户Connection conn = null;PreparedStatement ...
- SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【后端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】
前后端分离项目快速搭建[后端篇] 数据库准备 后端搭建 1.快速创建个SpringBoot项目 2.引入依赖 3.编写代码快速生成代码 4.运行代码生成器生成代码 5.编写application.pr ...
- 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...
阿里妹导读:你有没有遇到过这种情况:过几周或者几个月之后,再看到自己写的代码,感觉一团糟,不禁怀疑人生?我们每天都与代码打交道,但当被问道什么是好的代码时,很多人可能会先愣一下,然后给出的回答要么比较 ...
- JDBC有这一篇就够了(万字JDBC附代码详解)
目录: 1.JDBC的本质 2.JDBC的使用步骤 3.DriverManager对象 4.Connectioin对象 5.Statement对象 6.ResultSet对象 7.JDBC工具类 8. ...
- QT入门第一天平台使用规则和代码逻辑学习(初学者)
QT入门第一天平台使用规则和代码逻辑学习 QT学习目的,岗位需求 QT的 应用领域,发展历史 QT下载安装,不同版本QT介绍 新建QT工程 1.集成开发环境介绍 2.新建QT工程 3.QT工程介绍 Q ...
- 精读《低代码逻辑编排》
逻辑编排是用可视化方式描述逻辑,在一般搭建场景中用于代替逻辑描述部分. 更进一步的逻辑编排是前后端逻辑混排,一般出现在一站式 paas 平台,今天就介绍一个全面实现了逻辑编排的 paas 工具 nod ...
- SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建【前端篇】【快速生成后端代码、封装结果集、增删改查、模糊查找】【毕设基础框架】
前后端分离项目快速搭建[前端篇] 后端篇 前端篇 创建vue项目 安装所需工具 开始编码 1.在根目录下添加vue.config.js文件 2.编写main.js 3.编写App.vue 4.编写ax ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- 技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...
请求-调用-执行-存储,不论是网站还是APP,这是从代码到应用的运行逻辑,那么区块链世界的Dapp应用是否也会执行这套逻辑?Dapp的代码逻辑与传统app有什么不同? 6月20日,由HiBlock区块 ...
最新文章
- python 判断节假日_[宜配屋]听图阁
- 前端知识点回顾之重点篇——JavaScript异步机制
- DGA短域名(360样本) mark下 下次分析可以参考
- flink RPC(akka)
- 博客url什么形式_URL的完整形式是什么?
- python 近期用到的基础知识汇总(六)
- molicode生成vue增删改查功能
- python scikit_Python SciKit学习教程
- 区块链 DAG分布式账本技术 DAG数据结构和基于区块的数据结构的差别 优势
- c++ new操作符(new operator)、operator new、placement new 、operator new[] 及相对应的delete 操作符、operator delete
- DIY-希捷硬盘固件问题的解决方法
- Android adb shell命令详解及实例
- mac忘了密码怎么办_如果忘记Mac密码该怎么办
- lintcode1385. 幸运数字8
- Android 省电模式 降频吗,开启省电模式会降频吗
- 【复盘】记录生产环境问题,因没有及时合并maser
- android 内存优化 性能优化
- 学习笔记——OFDM仿真课设
- sourcetree的使用方法
- Oracle忘了保存,Oracle Cloud甲骨文云服务器忘记SSH秘钥或未设置Public key的解决办法...