JDBC-pdf

第3节 JDBC 入门

在这里插入图片描述

导入jar包

在这里插入图片描述

加载和注册驱动

在这里插入图片描述

第4节 DriverManager 类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第5节 Connection 接口、第6节 Statement 接口

在这里插入图片描述

在这里插入图片描述

需求:使用 JDBC 在 MySQL 的数据库中创建一张学生表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需求:向学生表中添加 4 条记录,主键是自动增长

在这里插入图片描述
在这里插入图片描述

ResultSet 接口

在这里插入图片描述在这里插入图片描述

需求:确保数据库中有 3 条以上的记录,查询所有的学员信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第7节 数据库工具类 JdbcUtils

需求:上面写的代码中出现了很多重复的代码,可以把这些公共代码抽取出来。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:用户登陆

在这里插入图片描述
在这里插入图片描述

package com.itheima;

import com.itheima.utils.JdbcUtils;

import javax.xml.transform.Result;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Demo7Login {
    //从控制台上输入的用户名和密码
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        login(name, password);
    }

    /**
     * 登录的方法
     */
    public static void login(String name, String password) {
//a) 通过工具类得到连接
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            connection = JdbcUtils.getConnection();
//b) 创建语句对象,使用拼接字符串的方式生成 SQL 语句
            statement = connection.createStatement();
//c) 查询数据库,如果有记录则表示登录成功,否则登录失败
            String sql = "select * from user where name='" + name + "' and password='" + password
                    + "'";
            System.out.println(sql);
            rs = statement.executeQuery(sql);
            if (rs.next()) {
                System.out.println("登录成功,欢迎您:" + name);
            } else {
                System.out.println("登录失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
//d) 释放资源
            JdbcUtils.close(connection, statement, rs);
        }
    }
}

7.3.3SQL 注入问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第8节 PreparedStatement 接口

在这里插入图片描述

package com.itheima;

import com.itheima.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * 使用 PreparedStatement
 */
public class Demo8Login {
    //从控制台上输入的用户名和密码
    public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name = sc.nextLine();
        System.out.println("请输入密码:");
        String password = sc.nextLine();
        login(name, password);
    }

    /**
     * 登录的方法
     *
     * @param name
     * @param password
     */
    private static void login(String name, String password) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
//写成登录 SQL 语句,没有单引号
        String sql = "select * from user where name=? and password=?";
//得到语句对象
        PreparedStatement ps = connection.prepareStatement(sql);
//设置参数
        ps.setString(1, name);
        ps.setString(2, password);
        ResultSet resultSet = ps.executeQuery();
        if (resultSet.next()) {
            System.out.println("登录成功:" + name);
        } else {
            System.out.println("登录失败");
        }
//释放资源,子接口直接给父接口
        JdbcUtils.close(connection, ps, resultSet);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.8 PreparedStatement 执行 DML 操作

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

第9节 JDBC 事务的处理

在这里插入图片描述

package com.itheima;

import com.itheima.utils.JdbcUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Demo12Transaction {
    //没有异常,提交事务,出现异常回滚事务
    public static void main(String[] args) {
        //1) 注册驱动
        Connection connection = null;
        PreparedStatement ps = null;
        try {
//2) 获取连接
            connection = JdbcUtils.getConnection();
//3) 开启事务
            connection.setAutoCommit(false);
//4) 获取到 PreparedStatement
//从 jack 扣钱
            ps = connection.prepareStatement("update account set balance = balance - ? where
                    name = ? ");
            ps.setInt(1, 500);
            ps.setString(2, "Jack");
            ps.executeUpdate();
//出现异常
            System.out.println(100 / 0);
//给 rose 加钱
            ps = connection.prepareStatement("update account set balance = balance + ? where
                    name = ? ");
            ps.setInt(1, 500);
            ps.setString(2, "Rose");
            ps.executeUpdate();
//提交事务
            connection.commit();
            System.out.println("转账成功");
        } catch (Exception e) {
            e.printStackTrace();
            try {
//事务的回滚
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            System.out.println("转账失败");
        } finally {
//7) 关闭资源
            JdbcUtils.close(connection, ps);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值