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.hqwc.cn/news/572534.html

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

相关文章

nn.Embedding()、怎么将多句话转为vector的?

API&#xff1a; torch.nn.Embedding(num_embeddings, embedding_dim, padding_idxNone, max_normNone, norm_type2.0, scale_grad_by_freqFalse, sparseFalse, _weightNone) num_embeddings (python:int) – 词典的大小尺寸&#xff0c;比如总共出现5000个词&#xff0c;…

Overcooked!(并查集区间元素合并优化)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 5 1 1 2 3 1 2 2 2 4 3 1 4 3 2 5 输出 YES YES NO 思路&#xff1a; 根据题意&#xff0c;这…

.NET开源免费、功能强大的 Windows 截图录屏神器

前言 今天大姚给大家分享一款.NET开源免费&#xff08;基于GPL3.0开源协议&#xff09;、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器&#xff1a;ShareX。 功能特性 ShareX 是一个开源的屏幕捕捉工具&#xff0c;具有丰富的功能特性&#xff0c;包括但不限于…

内网exp对抗

内网工具对抗 首先&#xff0c;你需要分析&#xff1a; 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次&#xff0c;你需要考虑&#xff1a; 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

中证数据社招笔试题【第一卷带答案】

一、单选题 根据决策条件的可控程度&#xff0c;决策可以分为&#xff1a;确定型决策、风险型决策和非确定型决策打篮球时扭伤了脚&#xff0c;下列措施不可取的是&#xff1a;立即用热毛巾敷扭伤部位我国独立自主的和平外交政策&#xff0c;应坚持把&#xff1a;国家主权和国…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数&#xff0c;此时输入参数和返回结果的属性名称开头默认为小写&#xff0c;如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

代码随想录算法训练营第三十六天 | 35. 无重叠区间、763. 划分字母区间、56. 合并区间

代码随想录算法训练营第三十六天 | 35. 无重叠区间、763. 划分字母区间、56. 合并区间 35. 无重叠区间题目解法 763. 划分字母区间题目解法 56. 合并区间题目解法 感悟 35. 无重叠区间 题目 解法 更新区间&#xff0c;只保留最小区间&#xff0c;局部最优&#xff0c;推到最优…

阿里云服务器多少钱一个月?低至5元1个月

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

力扣Lc23--- 290. 单词规律(java版)-2024年3月27日

1.题目描述 2.知识点 1&#xff09;思路 &#xff08;1&#xff09;s.split(" "); 是将字符串 s 按空格进行分割&#xff0c;得到一个单词列表。 &#xff08;2&#xff09;建立模式字符和单词之间的双向映射关系&#xff0c;我们可以使用两个哈希映射&#xff08;或…

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

做跨境用什么代理IP?如何分辨代理IP类型?

跨境外贸是近几年来的热门行业&#xff0c;在众多助力跨境出海的工具中&#xff0c;代理IP也是强力的一大保障。不仅可以帮助企业拓展更大的地区市场&#xff0c;更加顺畅进行市场调查&#xff0c;更重要地&#xff0c;在TikTok、Amazon、Ebay、Instagram、Etsy等等跨境平台业务…

Day23:事务管理、显示评论、添加评论

事务管理 事务的定义 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元&#xff0c;这系列操作要么全执行&#xff0c;要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体&#xff08;事务中部分执行失败就会回滚 。一致性(C…