2022-08-19 第四小组 修身课 学习笔记every day

数据库事务:是数据库的特性
 
  MysqL数据库引擎
  1.在MysqL中,只有使用了Innodb引擎的数据库支持事务
  2.事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,
       要么全部不执行。
  3. 发生在DML中,增删改。
 
  事务的四大特征ACID
  1、原子性 A。
   一个事务,要么全部完成,要么全部不完成。
  2、一致性 C。
   在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
  3、隔离性 Isolation
  数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。
  4、持久性 D
   事务结束以后,对数据的增删改是永久性的。
 
   术语:提交事务,回滚事务(事务回滚)
 
   1、事务一旦提交,就不可能回滚。
   2、当一个连接对象被创建时,认情况下自动提交事务。
   3、关闭连接时,数据会自动提交事务。
 
   操作事务的步骤:
   1、关闭事务的自动提交
 
   当做出增删改操作,把变化发生在内存中,提交事务,才会真正提交给数据库

    @Test
    public void test01() {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
 
        try {
            conn = JDBCUtil.getConnection();
            // 关闭事务的自动提交
            // true:开启(认) false:关闭
            // 开启一个事务
            conn.setAutoCommit(false);
            // 把id为1的账户余额-1000
            String sql1 = "update bank set balance = balance - 1000 where id = 1";
            pstmt1 = conn.prepareStatement(sql1);
            pstmt1.executeUpdate();
 
            String sql2 = "update bank set balance = balance + 1000 where id = 2";
            pstmt2 = conn.prepareStatement(sql2);
            pstmt2.executeUpdate();
 
            int i = 10 / 0;
 
            // 提交事务
            conn.commit();
 
            System.out.println("转账成功...");
 
        } catch (Exception e) {
            try {
                // 事务回滚
                conn.rollback();
            } catch (sqlException ex) {
                throw new RuntimeException(ex);
            }
            throw new RuntimeException(e);
        } finally {
            JDBCUtil.close(conn,pstmt1);
            JDBCUtil.close(null,pstmt2);
        }
    }
    @Test
    public void test03() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
 
        try {
            conn = JDBCUtil.getConnection();
 
            String sql = "select * from user";
 
            pstmt = conn.prepareStatement(sql);
 
            rs = pstmt.executeQuery();
 
            // 获取元数据
            /*
                元数据:表格本身的数据
                    表格的列名,结果集的列名
             */
            ResultSetMetaData MetaData = rs.getMetaData();
//            System.out.println(MetaData.getColumnName(1));
//            System.out.println(MetaData.getColumnName(2));
//            System.out.println(MetaData.getColumnCount());
//            MetaData.get
            for (int i = 1; i <= MetaData.getColumnCount() ; i++) {
                MetaData.getColumnName(i);
            }
 
 
            while (rs.next()) {
                int id = rs.getInt("id");
                String username = rs.getString("username");
                String password = rs.getString("password");
                System.out.println("id:" + id + ",username:" + username + ",password:" + password);
            }
 
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (sqlException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            JDBCUtil.close(conn,pstmt,rs);
        }
    }
线性结构:数据元素之间存在一对一的线性关系
顺序存储结构:顺序存储的线性表为顺序结构,其中的存储元素(地址)是连续的
链式存储结构:链式存储的线性表为链表,存储元素不(地址)一定是连续的
线性结构常见的有:数组,队列,链表,栈
非线性结构:二维数组,多维数组,广义表,树结构,图结构
稀疏(sparsearray)数组:
记录数组一共有几行几列,有多少个不同的值 int[sum+1][3]
队列:
银行排队(先入先出),
一个有序列表,可以用数组或是链表实现

链表(linked list):
是有序的列表,链表是以节点的方式来储存
每个节点包含date域,next域(指向下一个节点),各个节点不一定是连续储存,
链表分带头的链表和没有头节点的链表,根据实际的需求来确定

基本的概念:
数据结构表示数据在计算机中的存储和组织形式,主要描述数据元素之间的位置关系等,选择适当的数据结构可以提高计算机程序的运行效率(时间复杂度)和存储效率(空间复杂度)
数据结构的三种层次:
1,逻辑结构--抽象层:主要描述的是数据元素之间的逻辑关系

1,静态存储区(方法区)
主要放静态数据,全局static数据和常量.
在程序编译时就分配好,在程序运行期间都存在
2,栈区
执行方法时,方法体内的局部变量在栈上创建
方法执行结束内存自动释放
效率很高,但是分配内存容量有限
3,堆区(动态内存分配)
new出来的内存
这部分内存不使用时由java垃圾回收器回收
 

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...