当前位置: 首页 > news >正文

2024考古之还在用原始JDBC开发 手搓 案例 实现一个模块的增删改

JDBC案例

将来如果完成的话

就代表对JDBC里面的知识点全部融会贯通了

其实就是对数据的增删改查

我们入门做不出来前端的内容

很正常

准备环境

建表

use mybatis;create table tbl_brand
(id int primary key auto_increment,brand_name varchar(20),company_name varchar(20),ordered int ,description varchar(100),staus int);insert into tbl_brand(brand_name, company_name, ordered, description, staus)
values ('三只松鼠','三只松鼠股份有限公司',5,'好吃不上火',0),('华为','华为技术有限公司',100,'华为致力于把数字世界带给每个人','1'),('小米','小米科技有限公司',50,'are you ok',1);SELECT * from tbl_brand;

创建实体类

封装实体类

package pojo;public class Brand {private Integer id;private String brandName;private String companyName;private String ordered;private String description;private String status;public Brand() {}public Brand(Integer id, String brandName, String companyName, String ordered, String description, String status) {this.id = id;this.brandName = brandName;this.companyName = companyName;this.ordered = ordered;this.description = description;this.status = status;}/*** 获取* @return id*/public Integer getId() {return id;}/*** 设置* @param id*/public void setId(Integer id) {this.id = id;}/*** 获取* @return brandName*/public String getBrandName() {return brandName;}/*** 设置* @param brandName*/public void setBrandName(String brandName) {this.brandName = brandName;}/*** 获取* @return companyName*/public String getCompanyName() {return companyName;}/*** 设置* @param companyName*/public void setCompanyName(String companyName) {this.companyName = companyName;}/*** 获取* @return ordered*/public String getOrdered() {return ordered;}/*** 设置* @param ordered*/public void setOrdered(String ordered) {this.ordered = ordered;}/*** 获取* @return description*/public String getDescription() {return description;}/*** 设置* @param description*/public void setDescription(String description) {this.description = description;}/*** 获取* @return status*/public String getStatus() {return status;}/*** 设置* @param status*/public void setStatus(String status) {this.status = status;}public String toString() {return "Brand{id = " + id + ", brandName = " + brandName + ", companyName = " + companyName + ", ordered = " + ordered + ", description = " + description + ", status = " + status + "}";}
}

在实体类当中

基本数据类型建议使用对应的包装类

写测试用例

我们的测试类是放在example包下的

我们要做的是查询 添加 修改 删除 这四个功能

我们在之前学习到的

我们的JDBC写代码 都是7步

我们首先得写一个配置类

目的是获取数据库的连接

package config;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.Properties;public class GetConnection {public static Connection getConnection() throws Exception {//加载配置文件Properties prop=new Properties();prop.load(new FileInputStream("JDBC/druid.properties"));//获取连接池对象DataSource dataSource=DruidDataSourceFactory.createDataSource(prop);//获取数据库连接 ConnectionConnection connection=dataSource.getConnection();return connection;}
}

但是由于路径的缘故

我们把他写在测试里面

我们首先思考如何书写SQL;语句

然后获取连接

然后执行就行了

package example;import com.alibaba.druid.pool.DruidDataSourceFactory;import org.junit.Test;
import pojo.Brand;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;//品牌数据的增删改查
public class BrandTest {@Testpublic void testSelectAll() throws Exception {System.out.println(System.getProperty("user.dir"));//获取连接Properties prop=new Properties();prop.load(new FileInputStream("src\\druid.properties"));//获取连接池对象DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);//获取数据库连接 ConnectionConnection connection=dataSource.getConnection();//定义sql语句String sql = "select * from tbl_brand";//获取PreparedStatement对象PreparedStatement pstmt = connection.prepareStatement(sql);//设置参数//执行sqlResultSet rs = pstmt.executeQuery();//处理结果 List<Brand> 封装brand对象 装载List集合List<Brand> brands=new ArrayList<>();while (rs.next()) {//获取数据int id = rs.getInt("id");String brandName = rs.getString("brand_name");String companyName = rs.getString("company_name");int ordered = rs.getInt("ordered");String description = rs.getString("description");int stauts = rs.getInt("status");//封装Brand对象Brand brand=new Brand(id,brandName,companyName,ordered,description,stauts);//装载集合brands.add(brand);}//打印集合for (Brand brand : brands) {System.out.println(brand);}//释放资源rs.close();pstmt.close();connection.close();}}

测试通过

添加数据

我们查看一下页面原型

我们代码接收一个insert语句

插入数据就行

我们要插入除了id外的所有数据

id为递增且唯一

我们还是用PreparedStatement对象接收

我们以后在开发JDBC程序的时候

要注意三个事情

一个是SQL语句怎么书写

然后是要填入的参数

然后是返回值

例如这边的添加操作

package example;import com.alibaba.druid.pool.DruidDataSourceFactory;import org.junit.Test;
import pojo.Brand;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;//增 添加数据
public class TestAdd {@Testpublic void testSelectAll() throws Exception {//模拟接收页面提交的数据String brandName="香飘飘";String companyName="香飘飘";int ordered=1;String description="绕地球一圈";int status=1;//insert into tbl_brand(brand_name,company_name,ordered,description,status) values(?,?,?,?,?);//参数 需要 除了id之外的所有参数信息//返回值 booleanSystem.out.println(System.getProperty("user.dir"));//获取连接Properties prop=new Properties();prop.load(new FileInputStream("src\\druid.properties"));//获取连接池对象DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);//获取数据库连接 ConnectionConnection connection=dataSource.getConnection();//定义sql语句String sql = "insert into tbl_brand(brand_name,company_name,ordered,description,status) values(?,?,?,?,?);";//获取PreparedStatement对象PreparedStatement pstmt = connection.prepareStatement(sql);//设置参数pstmt.setString(1,brandName);pstmt.setString(2,companyName);pstmt.setInt(3,ordered);pstmt.setString(4,description);pstmt.setInt(5,status);//执行sqlint count=pstmt.executeUpdate();  //影响的行数//处理结果System.out.println(count>0);//释放资源pstmt.close();connection.close();}}

添加成功

修改数据

我们只是换了个SQL数据模型

和参数

即可

代码

package example;import com.alibaba.druid.pool.DruidDataSourceFactory;import org.junit.Test;
import pojo.Brand;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;//改 修改数据
public class TestUpdate {@Testpublic void testUpdate() throws Exception {//模拟接收页面提交的数据String brandName="香飘飘";String companyName="香飘飘";int ordered=1;String description="绕地球三圈";int status=1;int id=1;//update tbl_brand set brand_name = ?,company_name=?,ordered=?,description=?,status=? where id =? ;//参数 需要 所有参数信息//返回值 booleanSystem.out.println(System.getProperty("user.dir"));//获取连接Properties prop=new Properties();prop.load(new FileInputStream("src\\druid.properties"));//获取连接池对象DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);//获取数据库连接 ConnectionConnection connection=dataSource.getConnection();//定义sql语句String sql = "update tbl_brand set brand_name = ?,company_name=?,ordered=?,description=?,status=? where id =? ;";//获取PreparedStatement对象PreparedStatement pstmt = connection.prepareStatement(sql);//设置参数pstmt.setString(1,brandName);pstmt.setString(2,companyName);pstmt.setInt(3,ordered);pstmt.setString(4,description);pstmt.setInt(5,status);pstmt.setInt(6,id);//执行sqlint count=pstmt.executeUpdate();  //影响的行数//处理结果System.out.println(count>0);//释放资源pstmt.close();connection.close();}}

执行成功

瞅一眼数据库

成功修改

删除数据

不解释了

直接灵魂三问

改一下sql语句和获取PreparedStatement对象的参数即可

执行代码

package example;import com.alibaba.druid.pool.DruidDataSourceFactory;import org.junit.Test;
import pojo.Brand;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;//增 添加数据
public class TestDelete {@Testpublic void testDelete() throws Exception {//模拟接收页面提交的数据int id=1;//delete from tbl_brand where id= ?//参数 需要id//返回值 booleanSystem.out.println(System.getProperty("user.dir"));//获取连接Properties prop=new Properties();prop.load(new FileInputStream("src\\druid.properties"));//获取连接池对象DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);//获取数据库连接 ConnectionConnection connection=dataSource.getConnection();//定义sql语句String sql = "delete from tbl_brand where id= ?";//获取PreparedStatement对象PreparedStatement pstmt = connection.prepareStatement(sql);//设置参数pstmt.setInt(1,id);//执行sqlint count=pstmt.executeUpdate();  //影响的行数//处理结果System.out.println(count>0);//释放资源pstmt.close();connection.close();}}

删除成功

数据库中的数据成功删除

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

相关文章:

  • 基于51单片机的篮球计分器设计
  • 武汉工程大学24计算机考研数据,有学硕招收调剂,而专硕不招收调剂!
  • 【C++题解】1741 - 求出1~n中满足条件的数的个数和总和?
  • 国产芯片方案/血氧仪方案SIC88336
  • 音乐界的颠覆与挑战分析
  • UE/C++简单功能实现笔记
  • 2024华为OD机试真题- 计算三叉搜索树的高度-(C++/Python)-C卷D卷-100分
  • AJAX 综合案例-day2
  • 分布式ID生成方案之雪花算法
  • 【b站-湖科大教书匠】1 计算机网络概述-计算机网络微课堂
  • Swarm 集群管理
  • 20212416 2023-2024-2 《移动平台开发与实践》综合实践
  • 秋招突击——6/19——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}
  • xshell使用vi命令:bash:vim:command not found
  • 全能AI客户端:ChatGPT Web Midjourney Proxy,AI绘画+GPT4o对话
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • gulp 教程
  • JS函数式编程 数组部分风格 ES6版
  • LeetCode29.两数相除 JavaScript
  • nginx 配置多 域名 + 多 https
  • React-Native - 收藏集 - 掘金
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vim Clutch | 面向脚踏板编程……
  • vue:响应原理
  • vue-cli在webpack的配置文件探究
  • VuePress 静态网站生成
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 将 Measurements 和 Units 应用到物理学
  • 前端
  • 让你的分享飞起来——极光推出社会化分享组件
  • 实现简单的正则表达式引擎
  • 提醒我喝水chrome插件开发指南
  • 为视图添加丝滑的水波纹
  • 移动端唤起键盘时取消position:fixed定位
  • 以太坊客户端Geth命令参数详解
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​渐进式Web应用PWA的未来
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​一些不规范的GTID使用场景
  • #162 (Div. 2)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (12)Hive调优——count distinct去重优化
  • (C语言)二分查找 超详细
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (pojstep1.3.1)1017(构造法模拟)
  • (笔记自用)LeetCode:快乐数
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)缓存同步
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (一)Dubbo快速入门、介绍、使用