栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC

API_Connection

数据库连接对象: 获取执行sql的对象;管理事务
Connection API可以管理事务,简单来理解就是,事务中定义的sql语句要么执行都成功,要么都失败

 public static void main(String[] args) throws SQLException {

        // 连接数据库
        String url = "jdbc:mysql:///db1?useSSL=false";
        String username = "root";
        String password = "123456";

        Connection conn = DriverManager.getConnection(url, username, password);

        // 定义sql语句,此处定义了两条sql语句
        String sql1 = "UPDATe `user` SET money = 2000 WHERe id = 1";
        String sql2 = "UPDATE `user` SET money = 2000 WHERe id = 2";

        // 获取执行sql的对象Statement
        Statement stmt = conn.createStatement();
        
        // 此处体现出了Connection API的作用之一:可以管理事务
        // 两条sql语句,要么都成功执行,要么事务回归,都执行失败
        try {
            // 1.开启事务
            conn.setAutoCommit(false);

            // 执行sql,返回值为影响行数
            int count1 = stmt.executeUpdate(sql1);

            System.out.println(7 / 0);
            int count2 = stmt.executeUpdate(sql2);

            // 处理结果
            System.out.println(count1);
            System.out.println(count2);

            // 2.提交事务
            conn.commit();
        } catch (Exception e) {
            System.out.println(e);
            // 3.事务回滚
            conn.rollback();
        }


        // 释放资源
        stmt.close();
        conn.close();


    }
API_Statement

作用:执行sql语句

 public static void main(String[] args) throws SQLException {
        // 连接数据库
        String url = "jdbc:mysql:///db1?useSSL=false";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        
        // 定义sql语句
        String sql1 = "UPDATE `user` SET money = 2000 WHERe id = 1";

        // 获取执行sql的对象Statement
        Statement stmt = conn.createStatement();
        
        // 执行sql,返回值为影响行数
        int count1 = stmt.executeUpdate(sql1);

        // 处理结果
        if (count1>0){
            System.out.println("修改数据成功!!!");
        }else{
            System.out.println("修改数据失败!!!");
        }

        // 释放资源
        stmt.close();
        conn.close();
    }
API_ResultSet

封装了DQL查询语句的结果

    public static void main(String[] args) throws SQLException {
        // 连接数据库
        String url = "jdbc:mysql:///db1?useSSL=false";
        String username = "root";
        String password = "123456";
        Connection connection = DriverManager.getConnection(url, username, password);

        String sql = "select * from user";

        Statement stmt = connection.createStatement();
		
		// 封装了dql查询语句的结果,可通过实例化的对象对数据进行获取,方便其它操作
        ResultSet rs = stmt.executeQuery(sql);


        // 创建集合
        ArrayList list = new ArrayList<>();
        
        while (rs.next()){
            Account account = new Account();
            int id =rs.getInt(1);
            String name = rs.getString(2);
            String sex = rs.getString(3);
            String address = rs.getString(4);
            double money = rs.getDouble(5);

            // 赋值给对象
            account.setId(id);
            account.setName(name);
            account.setSex(sex);
            account.setAddress(address);
            account.setMoney(money);

            // 存入集合
            list.add(account);
            System.out.println("--------------");

        }

        System.out.println(list);
        // 释放资源
        rs.close();
        stmt.close();
        connection.close();
    }
API_PreparedStatement

该API的作用十分的大,他会预编译sql语句并执行:主要解决的问题是sql注入的问题。我想sql注入的问题大家应该都不陌生。关于sql注入的具体解释,请自行查阅,此处只做简单介绍。

sql注入:通过操作输入来修改事先定义好的sql语句,用以达到执行代码对服务器进行攻击的方法

主要通过在sql语句中使用?去占位,即替代变量的位置,代码如下

  public static void main(String[] args) throws SQLException {
        // 连接数据库
        String url = "jdbc:mysql:///test";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url, username, password);

        // 接受用户名和密码
        String name = "gsw";
        String pwd = "123";
		
		// 该处通过?占位
        String sql = "select * from tb_user where name = ? and password = ? ";

        // 获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 设置?的值,此处可以通过?的顺序去填补上面的?你懂我意思吧?
        pstmt.setString(1, name);
        pstmt.setString(2, pwd);

        // 执行sql语句
        ResultSet rs = pstmt.executeQuery();

        // 判断是否登录成功
        if (rs.next()) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }

        rs.close();
        pstmt.close();
        conn.close();
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/778632.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号