首页 > 其他分享 >2022-8-19 第一组 (≥▽≤) 学习笔记

2022-8-19 第一组 (≥▽≤) 学习笔记

时间:2022-08-19 21:14:47浏览次数:58  
标签:事务 2022 19 第一组 resultSet connection statement sql name

目录

1.JDBC

  • Statement的不足之处
    • 大量的字符串拼接,代码可读性降低
    • sql注入
  • PreparedStatement——预编译(预加载)接口
    • 通过Connection获取的对象
    • 是Statement的接口的子接口
    • sql语句中可以传参。用?占位,通过setxxx的方法来个?赋值
    • 提供性能
    • 可以避免sql注入
package com.gyc.morning.test;

import com.gyc.morning.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class StudentScoreCourseDao {
    /**
     * 查询的方法
     */
    Connection connection = null;
    PreparedStatement statement = null;
    List<StudentScoreCourse> list = new ArrayList<>(16);
    ResultSet resultSet = null;
    String sql = "select stu.name , sc.score ,c.name from student stu left join scores sc " +
            "on sc.s_id =stu.id left join course c on sc.c_id = c.id ";

    {
        connection = JDBCUtil.getConnection();
    }

    public List<StudentScoreCourse> getAll() {
        try {
            statement = connection.prepareStatement(sql);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }

        return list;
    }

    /**
     * 查询某一个学生的分数
     */
    public List<StudentScoreCourse> getStudent(String name) {
        try {
            sql = sql + " where stu.`name` = ?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, name);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }

        return list;
    }


    /**
     * 查询某一个学生的某一科的分数
     */

    public List<StudentScoreCourse> getCourse(String name, String cname) {
        try {
            sql = sql + " where c.`name` = ? and  stu.`name` = ?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, cname);
            statement.setString(2, name);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }

        return list;
    }

    /**
     * 查询某一个学生的总分
     */
    public List<StudentScoreCourse> getCourseSum(String name) {
        try {
            sql = sql.replace("sc.score", "Sum(sc.score)") + " where stu.`name` = ? ";
            statement = connection.prepareStatement(sql);
            statement.setString(1, name);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }

        return list;
    }

    /**
     * 查询某一个学生的平均分
     */
    public List<StudentScoreCourse> getCourseAvg(String name) {
        try {
            sql = sql.replace("sc.score", "Avg(sc.score)") + " where stu.`name` = ?";
            statement = connection.prepareStatement(sql);
            statement.setString(1, name);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }

        return list;
    }

    /**
     * 按照总分排序
     */
    public List<StudentScoreCourse> getCourseSumSort() {
        try {
            sql = sql.replace("sc.score", "Sum(sc.score)") +
                    " group by stu.`name` Order by Sum(sc.score) Desc , stu.id ASC ";
            statement = connection.prepareStatement(sql);
            resultSet = statement.executeQuery();
            while (resultSet.next()) {
                list.add(new StudentScoreCourse(resultSet.getString(1),
                        resultSet.getInt(2), resultSet.getString(3)));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeConnection(connection, statement, resultSet);
        }
        return list;
    }
}

2.数据库事务

  • 数据库的特性

  • MySQL的数据库引擎

    • 在mysql中,只有使用了Innodb引擎的数据库才支持事务
    • 事务处理用来维护数据的完整性。保证sql语句要么全部执行,要么全部不执行。
    • 发生在DML中,增删改
  • 事务的四大特征(ACID)

    • 原子性——一个事务要么全部完成,要么全部不完成。
    • 一致性——在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
    • 隔离性——数据库允许多个事务同时对数据进行处理。每个事务之间是互相隔离的。
    • 持久性——事务结束以后对数据的增删改是永久性的。
  • 提交事务,回滚事务(事务回滚)

    • 事务一旦提交,就不能回滚。
    • 当一个连接对象被创建时,默认情况是自动提交事务。
    • 关闭连接时,数据会自动提交事务。
  • 操作事务

    • 关闭事务的自动提交

      • new Connection().setAutoCommit(true)  //方法 true 开启(默认), false 关闭
        
    • 提交事务

      • new Connection().commit()  // 事务提交
        
    • 事务回滚

      • new Connection().rollback() // 事务回滚  把已经修改的数据撤销 
        
    • 当做出增删改的时候,数据是在内存中的,只有提交了事务,才会在数据库中体现。

面试题

  • SQL注入:
    • 通过字符串的拼接可以得到一个恒等的sql语句,可以跳过某些判断

标签:事务,2022,19,第一组,resultSet,connection,statement,sql,name
From: https://www.cnblogs.com/gycddd/p/16603303.html

相关文章

  • 2022暑假集训总结
    经过简介7月20日到达内江天立学校,在小学部的机房上课。这里没什么人,比较安静,也没有那么热,学习环境挺好的。开始是老姚给我们上的课,主要讲了tarjan,然后由几位学长讲课。期......
  • 【2022-08-19】mysql基础知识(六)
    mysql基础知识(六)mysql之视图view什么是视图?视图就是通过查询得到的一张虚拟表,然后保存下来,下次直接进行使用即可。即:将SQL语句的查询结果当做虚拟表保存起来,以后可......
  • 20220819总结
    这次考试太烂了,又没考过Diavolo。T1简单的入门题,先热身。#include<iostream>#defineintlonglong#defineN5001usingnamespacestd;intn,ans;doublea[N]......
  • 2022-08-19 田龙跃 JDBC知识
    JAVA链接数据库步骤1.加载驱动2.建立链接3.获取statement语句对象执行sql4.处理结果集5.关闭连接加载驱动Class.forName(驱动名称)建立连接connection=DriverMa......
  • 2022-8-19第一组孙乃宇JDBC学习2
    JDBC的学习Statement的不足:大量的字符串拼接,代码可读性降低。sql注入SQL注入:BUG通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断。如login("zxcvzx......
  • 2022-08-19 第四组 王佳齐 学习笔记
    思维导图学习笔记PreparedStatement:预编译(预加载)接口2.事务处理可以用来维护数据的完整性。保证sql语句要么全执行,要么全部不执行。1.通过conn获取的对象2.是Stateme......
  • 2022-08-19 记录一下 奥睿科 2.5/3.5英寸双盘位USB3.0硬盘底座 使用感受
    什么?电脑识别不了硬盘???我把京东客服给骂了,再到我写这个随笔的时候,有点心疼那个京东客服。为了扩容,昨天入手了希捷的2t机械家用盘,以及这次的主角奥睿科硬盘底座,简称硬盘盒......
  • 8.19总结
    啊~,本周的第一个暴零所罗门王的宝藏\(solution\)第一眼的时候完全没有想到是图论,当然暴零不是这个原因把行和列进行连边,因为行i的旋转次数+列j的旋转次数一定等于\(c_{......
  • 2022-08-19 田龙跃 JAVAWEB项目(小论坛)
    JAVA小项目E-R图个人理解:E-R图中每个实体到我们对java中就是一个domin类,字段就是属性流程图注册流程图登录流程图JSTL标签jstl表达式:表达式的用法也是见名知义(和......
  • 2022暑假集训总结
    2022暑假集训总结收获做了██道题跟着多校联训学的时候,主要收获是学会了一些基本的暴力算法和一些以前不知道的算法概念后来高烧休息了几天回来以后主要的收获是考试......