java学习笔记day04

活动地址:CSDN21天学习挑战赛

 * 数据库事务:是数据库的特性
 *
 * 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垃圾回收器回收

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值