sql语句的常用方法以及sql语句的通用方法

SQL语句常用方法及步骤

  • 一、sql七步曲
    • 1.七步曲
    • 2.DVD数据库中的表的设计详情:
  • 二、增
  • 三、删
  • 四、改
  • 五、查
  • 六、方法优化1--非查找
  • 七、方法优化2--查找
  • 总结


一、sql七步曲

1.七步曲

1.手动加载数据库驱动类
2.获得数据库连接对象
3.写sql语句
4.获得执行对象
5.执行命令同时获得结果
6.处理结果
7.关闭资源

2.DVD数据库中的表的设计详情:

在这里插入图片描述


二、增

以DVD为例,向表中新增一个DVD对象

public static void addDVD() throws ClassNotFoundException, SQLException {Scanner input = new Scanner(System.in);//1.手动加载数据库驱动类Class.forName("com.mysql.cj.jdbc.Driver");//2.建立数据库连接String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);//3.写sql语句String sql = "insert into dvd(name,state,money,count)value (?,'可借',?,0)";//4.获得执行对象PreparedStatement ps = con.prepareStatement(sql);System.out.println("请输入新增DVD的名称:");String name = input.next();System.out.println("请输入新增DVD的日租金:");double money = input.nextDouble();ps.setString(1,name);           //设置sql语句中的?的值,1,2是指在sql语句中的第几个问号,后面的就是对应的值ps.setDouble(2,money);//5.执行sql语句并获取结果(i为表中有变动的数量,例如这个新增,那在表中会多出来一行数据,有变动的数量就是1)int i = ps.executeUpdate();//6.处理结果:if (i == 1){System.out.println("添加成功!");}else{System.out.println("添加失败!");}//7.关闭连接源(和IO流关闭原则一样,先开的后关)ps.close();con.close();}

三、删

以DVD为例,对表进行一个删除其中DVD对象的操作

public static void delDVD() throws SQLException, ClassNotFoundException {Scanner input = new Scanner(System.in);//1.手动加载数据库驱动类Class.forName("com.mysql.cj.jdbc.Driver");//2.获得数据库连接对象String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);//3.写sql语句String sql = "delete from dvd where name=?";//4.获得执行对象PreparedStatement ps = con.prepareStatement(sql);System.out.println("请输入要删除DVD的名字:");String name = input.next();ps.setString(1,name);//5.执行命令同时获得结果int i = ps.executeUpdate();//6.处理结果if (i > 0){System.out.println("删除DVD成功!");}else{System.out.println("删除DVD失败!");}//7.关闭资源ps.close();con.close();}

四、改

以DVD为例,向表中修改一个DVD对象的数据

public static void update() throws ClassNotFoundException, SQLException {Scanner input = new Scanner(System.in);//1.手动加载数据库驱动类:Class.forName("com.mysql.cj.jdbc.Driver");//2.获得数据库连接对象String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);//3.写sql语句String sql = "update dvd set state = ?,lendDate = ?,count = count+1 where name = ?";System.out.println("请输入要修改的DVD名称:");String name = input.next();System.out.println("请输入修改后的状态:");String state = input.next();System.out.println("请输入修改后的时间:");String date = input.next();//4.获得执行对象PreparedStatement ps = con.prepareStatement(sql);ps.setString(1,state);ps.setString(2,date);ps.setString(3,name);//5.执行命令同时获得结果:int i = ps.executeUpdate();//6.处理结果:if (i > 0){System.out.println("修改成功!");}else{System.out.println("修改失败!");}//7.关闭资源ps.close();con.close();}

五、查

以DVD为例,对表进行一个查看的操作

public static void getDt() throws SQLException, ClassNotFoundException {//1.手动加载数据库驱动类:Class.forName("com.mysql.cj.jdbc.Driver");//2.建立与数据库的连接String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);System.out.println(con);//3.写sql语句String sql = "select * from dvd";//4.获得执行对象:PreparedStatement ps = con.prepareStatement(sql);//5.执行sql命令 同时获得结果ResultSet rs = ps.executeQuery();//6.处理结果System.out.println("编号\t名称\t状态\t租金\t借出日期\t借出次数");while (rs.next()){System.out.println(rs.getInt("id") + ";" + rs.getString(2)+ ";" + rs.getString(3) + ";" + rs.getDouble(4)+ ";" + rs.getString(5) + ";" + rs.getInt(6));}//7.关闭所有连接资源rs.close();ps.close();con.close();}

六、方法优化1–非查找

在上面的操作过程中我们可以看到,其中只有sql语句不同,和结果处理需要差异化,其他的都大致相同,那么我们将不含有rs对象的也就是不进行查找的几种方法整合一下,提取出一个通用的方法

//非查看操作的方法public int fckSQL(Object... objects) throws ClassNotFoundException, SQLException {//利用可变参数控制传入的数据,根据具体情况具体分析要传入几个参数,因为参数类型不一致,所以使用了object类型//传入的第一条数据为sql语句//1.手动加载数据库驱动类Class.forName("com.mysql.cj.jdbc.Driver");//2.获得数据库连接对象String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);//3.写sql语句String sql = (String) objects[0];//这里使用了可变参的第一个参数,sql语句//4.获得执行对象PreparedStatement ps = con.prepareStatement(sql);for (int i = 1;i < objects.length;i++){				//通过一个循环,对sql语句中的?进行赋值ps.setObject(i,objects[i]);}//5.执行sql语句并获取结果int i = ps.executeUpdate();//6.把结果返回出去,差异化处理//7.关闭资源ps.close();con.close();return i;//最后根据返回到手里的i进行差异化结果处理}

以DVD为例,使用优化后的新增方法代码如下:

public void add() throws SQLException, ClassNotFoundException {String sql = "insert into dvd(name,state,money,count)value (?,'可借',?,0)";System.out.println("请输入新增DVD的名称:");String name = input.next();System.out.println("请输入新增DVD的日租金:");double money = input.nextDouble();int i =fckSQL(sql,name,money);//6.处理结果:if (i > 0){System.out.println("添加成功!!");}else{System.out.println("添加失败!");}}

这样我们的代码非常简洁,只需要短短几行就代替了七步曲


七、方法优化2–查找

在我们开过日常中,往往有进行筛选,查找的操作不会直接操作表,是将筛选完的结果放入集合中再操作集合,这里我就用其中一种方法演示一下这种优化的思路

//查找符合条件的放入集合public ArrayList<dvdEntry> ckSQL(Object... objects) throws ClassNotFoundException, SQLException {//返回值类型是一个集合,泛型是自己定义的一个类,与表的设计模式中的属性一致的类ArrayList<dvdEntry> list = new ArrayList<>();//1.手动加载数据库驱动类Class.forName("com.mysql.cj.jdbc.Driver");//2.获得数据库连接对象String username = "root";String password = "root";String url = "jdbc:mysql://localhost:3306/jr?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";Connection con = DriverManager.getConnection(url,username,password);//3.写sql语句String sql = (String) objects[0];//4.获得执行对象PreparedStatement ps = con.prepareStatement(sql);for (int i = 1;i < objects.length;i++){ps.setObject(i,objects[i]);}//5.执行sql命令 同时获得结果ResultSet rs = ps.executeQuery();//6.处理结果while (rs.next()){list.add(new dvdEntry(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getDouble(4),rs.getString(5),rs.getInt(6)));}//7.关闭资源rs.close();ps.close();con.close();return list;}

直接用例子体会一下:
以DVD为例,使用优化后的查看方法代码如下:

public void see() throws SQLException, ClassNotFoundException{String sql = "select * from dvd";ArrayList<dvdEntry> list = ckSQL(sql);ListIterator lit = list.listIterator();while (lit.hasNext()){System.out.println(lit.next().toString());}}

总结

以上的内容就是数据库中的增删改查以及提取出的通用方法,在开发过程中注意灵活使用,有了通用方法之后,只需要记住sql语句就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leaflet 中创建一个二维地图

要在 Leaflet 中创建一个二维地图&#xff0c;需要以下步骤&#xff1a; 1. 引入 Leaflet 库 首先&#xff0c;你需要在 HTML 文件中引入 Leaflet 库的 CSS 和 JavaScript 文件。你可以从官方网站下载 Leaflet&#xff0c;或者通过 CDN 引入。 <!-- Leaflet CSS --> &…

【QQ版】QQ群短剧机器人源码 全网短剧机器人插件

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 QQ版本可以兼容两个框架&#xff08;HTQQ&#xff0c;MYQQ这两个的vip版也可以使用) 支持私聊与群聊&#xff0c;命令是 搜剧影视关键词 如果无法搜索到影视资源&#xff0c;请使用下方命令&…

推特Twitter有直播功能吗?如何用Twitter直播?

现在各大直播平台已经成为社交媒体营销的一种重要渠道&#xff0c;它让品牌能够即时地与全球受众进行互动。据统计&#xff0c;直播市场正在迅速增长&#xff0c;预计到2028年将达到2230亿美元的规模。在这个不断扩张的市场中&#xff0c;许多社交媒体平台如YouTube、Facebook、…

【算法】单源最短路问题之Dijkstra算法

构建图 void TestGraphDijkstra(){const char* str "syztx";Graph<char, int, INT_MAX, true> g(str, strlen(str));g.AddEdge(s, t, 10);g.AddEdge(s, y, 5);g.AddEdge(y, t, 3);g.AddEdge(y, x, 9);g.AddEdge(y, z, 2);g.AddEdge(z, s, 7);g.AddEdge(z, x,…

【MySQL】13. 索引(重点)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。 不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成百上千倍。 但是天下没…

SD卡备份和烧录ubuntu20.04镜像

设备及系统&#xff1a;nuc幻影峡谷工控机&#xff0c;ubuntu20.04&#xff0c;树莓派4B&#xff0c;SD卡读卡器 一、确定SD卡设备号的两种方法 方法1&#xff1a; 将有ubuntu镜像的SD卡插入读卡器&#xff0c;再将读卡器插入电脑主机&#xff0c;在 工具 中打开 磁盘&#…

k8s入门到实战(十二)—— pod的深入理解

pod 深入理解 pod 容器生命周期 pod 的几种状态 可以使用命令kubectl get pod -w实时监控查看 pod 的状态 running&#xff1a;正常运行状态Pending&#xff1a;资源分配不对的时候会挂起&#xff0c;出现此状态Terminating&#xff1a;某个节点突然关机&#xff0c;上面的 p…

[DS]Polar靶场web(一)

静以养心&#xff0c;宽以养气。 跟着Dream ZHO大神学专升安的一天 swp 直接dirb扫出.index.php.swp的目录 function jiuzhe($xdmtql){return preg_match(/sys.*nb/is,$xdmtql);//如果包含以 "sys" 开始&#xff0c;后跟任意字符直到 "nb" 的字符串&…

JavaScript中的继承方式详解

Question JavaScript实现继承的方式&#xff1f; 包含原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承和ES6 类继承 JavaScript实现继承的方式 在JavaScript中&#xff0c;实现继承的方式多种多样&#xff0c;每种方式都有其优势和适用场景。以下…

macOS Sonoma 14.4.1 (23E224) 正式版 Boot ISO 原版可引导镜像下载

macOS Sonoma 14.4.1 (23E224) 正式版 Boot ISO 原版可引导镜像下载 2024 年 3 月 26 日凌晨&#xff0c;macOS Sonoma 14.4.1 更新修复了一个可能导致连接到外部显示器的 USB 集线器无法被识别的问题。它还解决了可能导致 Java 应用程序意外退出的问题&#xff0c;并修复了可…

Spring 事务传播行为

实现原理 : Aop (TransactionInterceptor) 实现 使用spring声明式事务注意事项 同一个bean中的方法调用必须重新声明一个bean调用、否则后续方法调用的事务默认使用第一个第二个不生效 package com.cloud.person.service.impl;import com.cloud.person.dao.S1Mapper; import…

STM32常用的开发工具有哪些

大家好&#xff0c;今天给大家介绍STM32常用的开发工具有哪些&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 STM32常用的开发工具主要包括以下几类&#xff1a; 集成开发环境&…

java数据结构与算法刷题-----LeetCode744. 寻找比目标字母大的最小字母

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 二分查找 二分查找 解题思路&#xff1a;时间复杂度O( l o g 2 …

说说webpack proxy工作原理?为什么能解决跨域?

文章目录 一、是什么二、工作原理三、跨域参考文献 一、是什么 webpack proxy&#xff0c;即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题&#xff08;浏览器安全策略限制&#xff09; 想要…

电路仿真软件大比拼:哪款更适合你?

以下是关于市面上常见的四款电路仿真软件的整体介绍&#xff1a; 1. Multisim&#xff08;美国&#xff0c;美国国家仪器&#xff08;NI&#xff09;有限公司&#xff09; 特点与优势&#xff1a; 直观的图形界面&#xff1a;提供用户友好的界面&#xff0c;便于快速搭建和修…

Openstack创建和操作实例,实现与外部网络通信

一、熟悉OpenStack图形界面操作 1、了解Horizon项目 Horizon项目 各OpenStack服务的图形界面都是由Horizon提供的。Horizon提供基于Web的模块化用户界面。Horizon为云管理员提供一个整体的视图。Horizon为终端用户提供一个自主服务的门户。Horizon由云管理员进行管理与控制&a…

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展&#xff0c;绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大&#xff0c;电竞游戏直播、游戏教程短视频也备受人们喜爱&#xff0c;自然&#xff0c;像游戏陪练、代练行业也随之生长起来&#xff0c;本文就来讲讲&#xff0c;从软件开发角…

【字节二面】SpringBoot可以同时处理多少请求

目录 一、示例代码二、那么springboot可以处理多少请求&#xff1f;三、maxConnections、maxThreads、acceptCount的关系 一、示例代码 RestController Slf4j public class RequestController {GetMapping("/test")public String test(HttpServletRequest request) …

腾讯放大招了!AniPortrait开源上线!音频驱动逼真人像动画合成!人人都是歌手!

文章链接&#xff1a;https://arxiv.org/pdf/2403.17694 github链接&#xff1a;https://github.com/Zejun-Yang/AniPortrait 本文提出了AniPortrait&#xff0c;一个新颖的框架&#xff0c;用于生成由音频和参考肖像驱动的高质量动画。方法分为两个阶段。首先&#xff0c;从音…

linux i2c-tools使用总结

1,安装iic-tools sudo apt install i2c-tools -y 2,查看有几条iic总线 [root@sino-platform:/root]# ls /dev/i2c- i2c-0 i2c-1 i2c-2 i2c-3 3,查看i2c命令 [root@sino-platform:/root]# i2c i2cdetect i2cdump i2cget i2cset 4,iic-help命令 [root@sino-platform…