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

本文详细介绍了SQL语句的常用操作,包括数据库连接、SQL编写、执行(增删改查)以及方法优化,以JDBC为例,展示了如何使用PreparedStatement进行操作,并强调了代码复用的重要性。
摘要由CSDN通过智能技术生成


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

  • 31
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值