首页 > 其他分享 >2022-08-19 第五组 赖哲栋 学习笔记

2022-08-19 第五组 赖哲栋 学习笔记

时间:2022-08-19 21:59:23浏览次数:91  
标签:事务 rs 19 08 sql 提交 第五组 conn pstmt

Statement的不足

  • 大量的字符串拼接,代码可读性降低
  • sql注入

PreparedStatement

预编译(预加载) 接口

  1. 通过conn获取的对象
  2. 是statement接口的子接口
  3. sql语句中可以传参。用?占位,通过setXXX方法来给?赋值
  4. 提供性能
  5. 避免sql注入
-------更新数据
    @Test
    public void test01(){
        try {
            conn = JDBCUtil.getConnection();
            String sql = "UPDATE teacher SET name = ? WHERE id = ?";
            //预编译
            pstmt = conn.prepareStatement(sql);
            //给占位符赋值,按照位置
            pstmt.setString(1,"JJ");
            pstmt.setInt(2,5);

            int i = pstmt.executeUpdate();
            System.out.println(i);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.newclose(conn,pstmt);
        }
    }
--------------查询数据
@Test
    public void test02(){
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = JDBCUtil.getConnection();
            String sql = "SELECT * FROM scores WHERE s_id = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,5);
            rs = pstmt.executeQuery();

            while (rs.next()){
                int sId = rs.getInt("s_id");
                int score = rs.getInt("score");
                int cId = rs.getInt("c_id");
                System.out.println("学号:" + sId + ",分数:" + score + ",科目号:" + cId);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.close(conn,pstmt,rs);
        }
    }

元数据

  • 元数据:表格本身的数据
  • 表格的列名,结果集的列名

ResultSetMetaData接口获取元数据的方法
getMetaData() 获取元数据

resultsetmetadata.getColumnName(i);返回第i个列名

metaData.getColumnCount() 获得该结果集的列数

//getMetaData() 获取元数据
ResultSetMetaData metaData = rs.getMetaData();

//获得该结果集的列数
//resultsetmetadata.getColumnName(i);返回第i个列名

//metaData.getColumnCount() 获得该结果集的列数

for (int i = 1; i <= metaData.getColumnCount() ; i++) {
    metaData.getColumnName(i);
}

事务

数据库事务:是数据库的特性

Mysql的数据库引擎

  1. 在MySQL中,只有使用了Innodb引擎的数据库才支持事务
  2. 事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,要么全部不执行。
  3. 发生在DML中,增删改。

事务的四大特征ACID

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

术语:提交事务,回滚事务(事务回滚)

  1. 事务一旦提交,就不可能回滚。
  2. 当一个连接对象被创建时,默认情况下自动提交事务。
  3. 关闭连接时,数据会自动提交事务。

操作事务的步骤

  1. 关闭事务的自动提交
  • true:开启(默认) false:关闭
  • conn.setAutoCommit(false);
  1. 提交事务
  • conn.commit();
  1. 事务回滚:事务提交之前可以进行撤销
  • conn.rollback();

当做出增删改操作,把变化发生在内存中,提交事务,才会真正提交给数据库。

面试题

SQL注入:BUG

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

标签:事务,rs,19,08,sql,提交,第五组,conn,pstmt
From: https://www.cnblogs.com/laizhedong/p/16603407.html

相关文章

  • 2022-08-19 第二小组 张鑫 学习笔记
    实训四十一天JDBC(PreparedStatement,事务)1.学习重点1.PreparedStatement2.事务处理2.学习心得今天是在黑夜中学习的一天...3.学习内容PreparedStatementStatement......
  • 2022-8-19 第六组 JDBC(2)
    PreparedStatement:执行sql的对象1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题1.输入用户随便,输入密码:a'or'a'='a2.sql:sel......
  • 2022-08-19 第五组 罗佳明
    一、学习重点  二、学习内容案例一:查询(面对对象思想)packagecom.jsoft.morning.test;importorg.junit.Test;importjava.util.List;publicclassDemo{......
  • 2022-08-19 第八组 卢睿 学习心得
    目录JDBCStatement的不足SQL注入PreparedStatement:预编译(预加载)接口案例ResultSetMetaData(了解即可)数据库事务Mysql的数据库引擎4事务的四大特征ACID原子性A。一致性C......
  • 8.19
    CF1720D2题意:给定序列\(A\),求\(A\)的最长子序列\(B\),满足\(a_p\oplusp+1<a_{p+1}\oplusp\)\(n\leq3*10^5,0\leqa_i\leq10^9\)题解:枚举两边的值从高位到地位有多......
  • 2022-8-19 第一组 (≥▽≤) 学习笔记
    目录1.JDBC2.数据库事务面试题1.JDBCStatement的不足之处大量的字符串拼接,代码可读性降低sql注入PreparedStatement——预编译(预加载)接口通过Connection获取的......
  • 【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......