日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC 的代码逻辑封装

發布時間:2023/12/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 的代码逻辑封装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。