Jdbc 学习笔记

1 jdbc示例

使用jdbc框架,更新数据库中的数据

public static void main(String[] args) throws SQLException, ClassNotFoundException {
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String userName = "root";
        String pwd = "1234";

        //1 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2 获取链接
        Connection connection;
        connection = DriverManager.getConnection(url, userName, pwd);

        //3 定义sql
        String sql = "update account set money = 2000 where id = 1";

        //4 获取执行sql的对象 Statement
        Statement statement = connection.createStatement();

        //5 执行sql
        int count = statement.executeUpdate(sql);

        //6 输出结果
        System.out.println(count);

        //7 释放资源
        statement.close();
        connection.close();
    }

}

执行结果输出 1

2 jdbc事务使用示例

使用jdbc框架,来实现MySql中事务的操作

public static void main(String[] args) throws Exception {
        //1 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2 获取连接
        String url = "jdbc:mysql:///db1?useSSL = false";
        String useName = "root";
        String passWord = "1234";

        Connection connection = DriverManager.getConnection(url, useName, passWord);

        //3 定义sql
        String sql1 = "update account set money = 3000 where id = 1";
        String sql2 = "update account set money = 3000 where id = 2";

        //4 获取执行sql对象Statement
        Statement statement = connection.createStatement();

        try {
            connection.setAutoCommit(false);
            //5 执行sql
            int count1 = statement.executeUpdate(sql1);//受影响的行数

            System.out.println(count1);

//            int i = 3 / 0;//手动加错误
            int count2 = statement.executeUpdate(sql2);
            System.out.println(count2);

            /* ==============  提交事务  ===============*/
            connection.commit();
        } catch (Exception e) {
            /* ===================== 回滚事务 =======================*/
            connection.rollback();
            e.printStackTrace();
        }


        //6 释放资源
        statement.close();
        connection.close();
    }

以上代码可以正常更新数据库,如果把注释掉的手动错误不注释掉的话,sql1的语句将会被回滚。

3 jdbc执行DQL

使用jdbc来查询数据库中的内容

public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String userName = "root";
        String pwd = "1234";

        //1 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2 获取链接
        Connection connection;
        connection = DriverManager.getConnection(url, userName, pwd);

        //3 定义sql
        String sql = "select * from account";

        //4 获取执行sql的对象 Statement
        Statement statement = connection.createStatement();

        //5 执行sql
        ResultSet resultSet = statement.executeQuery(sql);

        //6 输出结果
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            double money = resultSet.getDouble("money");

            System.out.println("id = " + id + ", name = " + name + ", money = " + money);
        }

        //7 释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }

输出结果

id = 1, name = 张三, money = 3000.0
id = 2, name = 李四, money = 3000.0

4 sql注入

4.1 模拟注入问题
public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String userName = "root";
        String pwd = "1234";
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, userName, pwd);
        String name = "zhsan";
        String password = "' or '1' = '1";
        String sql = "select * from tb_user where username = '"+name + "' and password = '" + password + "'";
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);

        if (resultSet.next()) {
            System.out.println("登录成功~");
        } else {
            System.out.println("登录失败~");
        }

        resultSet.close();
        statement.close();
        connection.close();
    }

以上代码执行后,不管name和password输入什么值,都会提示登录成功,因为后面的or ‘1’ = ‘1’ 条件成立

4.2 使用PreparedStatement改进注入问题
public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://127.0.0.1:3306/db1";
        String userName = "root";
        String pwd = "1234";
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, userName, pwd);
        String name = "zhsan";
        String password = "' or '1' = '1";
        String sql = "select * from tb_user where username = ? and password = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setString(1, name);
        preparedStatement.setString(2, password);

        ResultSet resultSet = preparedStatement.executeQuery();

        if (resultSet.next()) {
            System.out.println("登录成功~");
        } else {
            System.out.println("登录失败~");
        }

        resultSet.close();
        preparedStatement.close();
        connection.close();
    }

此时将会输出登录失败,改成正确的用户名和密码后,会提示登录成功

5 数据库连接池

使用数据库连接池来避免频繁的创建和销毁连接,提升系统响应速度。
使用Druid数据库连接池框架

public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        properties.load(new FileInputStream("Jdbc-Demo/src/druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }

6 jdbc练习

创建表,添加假数据

-- 创建表tb_brand
create table tb_brand(
    id int primary key auto_increment,
    brand_name varchar(20),
    company_name varchar(20),
    ordered int,
    description varchar(100),
    status int
);

-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values('三只松鼠', '三鼠公司', 5, '好吃不贵', '0'),
('华为', '华为数科', 120, '提供高端科技', '1'),
('三只松鼠', '三鼠公司', 50, '美好的事即将发生', '1');
6.1 添加数据
public static void testAdd() throws Exception {
        String brandName = "比亚迪";
        String companyName = "比亚迪车业";
        int ordered = 300;
        String description = "都是电车干就完了";
        int status = 1;

        Properties properties = new Properties();
        properties.load(new FileInputStream("Jdbc-Demo/src/druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        String sql = "insert into tb_brand(brand_name, company_name, ordered, description, status) values(?, ?, ?, ?, ?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setString(1, brandName);
        preparedStatement.setString(2, companyName);
        preparedStatement.setInt(3, ordered);
        preparedStatement.setString(4, description);
        preparedStatement.setInt(5, status);

        int count = preparedStatement.executeUpdate();
        System.out.println("count = " + count);

        preparedStatement.close();
        connection.close();
    }
6.2 查询数据
public static void testSelectAll() throws Exception {
        Properties properties = new Properties();
        properties.load(new FileInputStream("Jdbc-Demo/src/druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        String sql = "select * from tb_brand;";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet = preparedStatement.executeQuery();
        Brand brand = null;
        List<Brand> brandList = new ArrayList<>();
        while(resultSet.next()) {
            brand = new Brand();
            brand.setId(resultSet.getInt("id"));
            brand.setBrandName(resultSet.getString("brand_name"));
            brand.setCompanyName(resultSet.getString("company_name"));
            brand.setOrdered(resultSet.getInt("ordered"));
            brand.setDescription(resultSet.getString("description"));
            brand.setStatus(resultSet.getInt("status"));
            brandList.add(brand);
        }

        System.out.println(brandList);
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
6.3 修改数据
public static void testUpdate() throws Exception {
        String brandName = "比亚迪";
        String companyName = "比亚迪车业";
        int ordered = 30;
        String description = "四个车轱辘的车企";
        int status = 1;
        int id = 4;

        Properties properties = new Properties();
        properties.load(new FileInputStream("Jdbc-Demo/src/druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        String sql = "update tb_brand\n" +
                "set brand_name = ?,\n" +
                "company_name = ?,\n" +
                "ordered = ?,\n" +
                "description = ?,\n" +
                "status = ?\n" +
                "where id = ?";

        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setString(1, brandName);
        preparedStatement.setString(2, companyName);
        preparedStatement.setInt(3, ordered);
        preparedStatement.setString(4, description);
        preparedStatement.setInt(5, status);
        preparedStatement.setInt(6, id);

        int count = preparedStatement.executeUpdate();
        System.out.println("count = " + count);

        preparedStatement.close();
        connection.close();
    }
6.4 删除数据
public static void testDelete() throws Exception {
        int id = 4;

        Properties properties = new Properties();
        properties.load(new FileInputStream("Jdbc-Demo/src/druid.properties"));
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        String sql = "delete from tb_brand where id = ?";

        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        preparedStatement.setInt(1, id);

        int count = preparedStatement.executeUpdate();
        System.out.println("count = " + count);

        preparedStatement.close();
        connection.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Day1–JDBC概述+JDBC完成CRUD+DAO设计 1.JDBC概述 1.1 什么是持久化(persistence): 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。 ​ 保存数据: ​ 内存中: 掉电之后,数据就没了. ​ 磁盘中: 掉电之后,数据依然存在. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要应用是将内存中的数据存储在 关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。 JPA:JavaEE的规范,Java persistence api: Java的持久化API. Hibernate实现了该规范.(xml/注解) -------------------------------------------------------------------------------------------------------------------- 在Java中,数据库存取技术 只能通过JDBC 访问数据库: JDBC访问数据库的形式主要有两种: ​ 1).直接使用JDBC的API去访问数据库服务器(MySQL/Oracle). ​ 2).间接地使用JDBC的API去访问数据库服务器. ​ 第三方O/R Mapping工具,如Hibernate, MyBatis等.(底层依然是JDBC) ​ JDBC是java访问数据库的基石,其他技术都是对jdbc的封装. 1.2 JDBC(Java DataBase Connectivity): 是一种用于执行SQL语句的Java API(接口,类,方法),可以为多种关系数据库提供统一访问, 它由一组用Java语言编写的类和接口组成。 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. ​ JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。 JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统, 这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。 ​ 总结: JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层,由java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成. --------------------- 作者:故事我忘了i 来源:CSDN

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值