首页 > 数据库 >sql语句的常用方法以及sql语句的通用方法

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

时间:2024-03-27 22:00:50浏览次数:23  
标签:语句 ps String System sql println 方法 out

SQL语句常用方法及步骤


一、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语句就好了。

标签:语句,ps,String,System,sql,println,方法,out
From: https://blog.csdn.net/Best_jiangX/article/details/137088349

相关文章

  • MySQL - 高阶语句(二)
    目录6.子查询操作:EXISTS关键字别名as7.视图理论:操作:视图的优缺点8.NULL值9.union联级9.1union(合并后去重)9.2unionall(合并后不去重)9.3取非交集值10.case条件选择查询语句​编辑二.连接查询2.1内连接2.2左连接2.3右连接三.存储过程1......
  • YoloV8改进策略:Neck和Head改进|ECA-Net:用于深度卷积神经网络的高效通道注意力|多种改
    摘要本文使用ECA-Net注意力机制加入到YoloV8Neck和Head中。我尝试了多种改进方法,并附上改进结果,方便大家了解改进后的效果,为论文改进提供思路。论文:《ECA-Net:用于深度卷积神经网络的高效通道注意力》arxiv.org/pdf/1910.03151.pdf最近,通道注意机制已被证明在改善深度卷......
  • 强力工具(欢迎fork):Java版本的Sybase ASE ISQL命令行
    \1.背景曾经,经常遇到有人问,Sybase(ASE,国内基本上把以前的SybaseASE数据库简称为Sybase数据库,现在官方已经叫做SAPASE,在我看来无所谓。只要大家知道它是哪个数据库就行了。)数据库有没有短小点的命令行工具。我说,昨个短小法?SybaseASE确实自带一个isql命令行,功能也很......
  • 【异常】IDEA链接TDengine提示SQLException: JNI ERROR (0x2354): Version not compat
    一、异常内容TDEngine提示SQLException:JNIERROR(0x2354):VersionnotcompatibleCausedby:java.sql.SQLException:JNIERROR(0x2354):Versionnotcompatible atcom.taosdata.jdbc.TSDBError.createSQLException(TSDBError.java:90) atcom.taosdata.jdbc.TS......
  • 【漏洞复现】万户 ezOFFICE wf_printnum.jsp SQL注入漏洞
    0x01产品简介万户OAezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日常工作......
  • Mysql数据库——高级SQL语句补充
    目录一、子查询——Subquery1.环境准备 2.In——查询已知的值的数据记录2.1子查询——Insert2.2子查询——Update2.3子查询——Delete3.NotIn——表示否定,不在子查询的结果集里3.Exists——判断查询结果集是否为空4.子查询——别名二、视图——View1.视图与表的联......
  • pgsql基础
    https://www.cnblogs.com/chenyablog/p/14647273.html--查看版本SELECTversion();--创建uuid扩展createextension"uuid-ossp";--生成一个uuidSELECTuuid_generate_v4();SELECT*fromabcwherebody.key="22"SELECTinfo->'customer'AS......
  • 网页图像渐变的方法(HTML+CSS) (渐变与切换)
    网页图像渐变的方法(HTML+CSS)(渐变与切换)Date:2024.03.27参考色彩runoob-渐变色工具渐变-水平多图效果HTML<divclass="conBoxpubCon"><divclass="imgBox"><imgclass="img1"src=""/><imgclass="......
  • SQL查询执行流程
    在MySQL执行一条查询语句的时候,比如SELECT*FROMTWHRERID=1,这篇文章来简要的描述SQL查询的执行流程可以把整体结构分成Server层和存储引擎层,Server层包括连接器,查询缓存器,分析器,优化器,执行器。存储引擎层则有常见的InnoDB,MyISAM,Menory存储引擎,在MySQL5.5后默认使......
  • 启动 uWSGI 时日志中显示 ImportError: No module named xxx 的解决方法
    前几天在部署Vue+Django+Uwsgi+Nginx的生产环境时,发现前端部署成功了,但是一直无法获取后端的数据,检查Uwsgi日志(位于uwsgi安装目录/projects/log下)发现日志中提示“ImportError:Nomodulenamedxxx”,试过网上的各种方法还是无法解决,最终摸索出一套解决方法如下: ......