Java笔记(15)-JDBC

  1. JDBC:Java DataBase Connectivity
1. 期望能用统一的一套规范来操作所有关系型数据库
2. JDBC即定义了一套操作所有关系型数据库的规则(接口)
3. 不同的数据库厂商实现了其自己版本的JDBC接口,提供数据库驱动jar包
4. 我们使用这套接口(JDBC)时,实际上使用的是驱动jar包中的实现类
  1. 操作步骤:
1. 导入jar包 http://central.maven.org/maven2/mysql/mysql-connector-java/
    a. 项目目录下新建libs文件夹,将jar包复制到libs内
    b. IDEA中右键libs文件夹,选择add as library
2. 注册驱动
    MySQL 8.0+
    Class.forName("com.mysql.cj.jdbc.Driver");
3. 获取数据库连接对象 Connection
    在8.0后需要设置连接属性
    URL:jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
    Connection connection = DriverManager.getConnection(URL,"用户名","密码");
4. 定义sql
    String sql = "update account set balance = 1000";
5. 获取执行sql语句的对象 Statement
    Statement statement = connection.createStatement();
6. 执行sql,接收返回结果
    int count = statement.executeUpdate(sql);
7. 处理结果
    System.out.println(count);
8. 释放资源
    statement.close();
    connection.close();
  1. JDBC中各个对象
1. DriverManager:驱动管理对象
    a. 作用
        1. 注册驱动
            static void registerDriver(Driver driver); // 注册给定的驱动程序DriverManager
            在MySQL-jar 5.0+可以不用写注册驱动,因为jar中包含了注册驱动的配置
        2. 获取数据库连接
            static Connection getConnection(String url, String user, String password);
            url:指定连接的路径
                jdbc:mysql://ip地址:端口号/数据库名
            user:用户名
            password:密码
2. Connection:数据库连接对象
    a. 作用
        1. 获取执行sql的对象
            Statement createStatement();
            PreparedStatement PreparedStatement(String sql);
        2. 管理事务:
            1. 开启事务:
                void setAutoCommit(boolean autoCommit);// 调用该方法设置为false,即开启事务,即关闭自动提交
            2. 提交事务:
                void commit();
            3. 回滚:
                void rollback();
3. Statement:执行静态sql语句的对象
    a. 作用
        1. 执行sql方法:
            //1. 执行任意sql语句
            boolean execute(String sql);
            //2. 执行DML(insert, update,delete)语句,DDL(create,alter,drop)语句
            int executeUpdate(String sql); -- 返回值int类型是影响的行数,用于判定sql成功与否
            //3. 执行DQL(select)查询语句
            ResultSet executeQuery(String sql);
            ResultSet中封装了查询的结果表
4. ResultSet:结果集对象
    a. 作用
        1. next方法:
            boolean next();
            光标从当前位置向下移动一行,一开始获取到的结果集中,光标指向的是表头
            如果想要读取数据,获取到ResultSet后应首先向下移动一行,即调用next()方法
            注意:
                next方法返回的布尔值,指的是当前指向的一行是否有数据
                true表示有数据,false表示现在指向表的末尾,当前行不能获取数据
        2. 获取数据:
            getInt(arg):返回int类型的值
            getString(arg):返回varchar类型的值
            getDouble(arg):返回double类型的值
            getXxx(arg):返回对应类型的值
            参数arg:
                * int类型:传入获取数据的的列标号,列标号从左至右1开始
                * String类型:传入获取数据的列的名称
        3. 使用步骤:
            1. 游标向下移动一行
            2. 判断是否有数据
            3. 获取数据
5. PreparedStatement:执行动态sql语句的对象
    a. 作用:解决SQL注入问题
        1. sql注入:在拼接sql时,有一些sql关键字参与字符串拼接则会造成安全性问题
            例如:
                String sql = "select * from user where username = '"+name+"' and password = '"+password+"'";
                若name随便写,在password中写入a' or 'a' = 'a,此时拼接完成后就会产生'a'='a'的永真条件
                此时可以查出所有信息,造成安全性问题
        2. 预编译SQL:sql语句参数使用占位符(?)替代
            String sql = "select * from user where username = ? and password = ?";
        3. 使用Connection对象获取PreparedStatement对象
            //Connection.prepareStatment(String sql)
            //参数传入预编译SQL语句
            PreparedStatement pstmt = conn.prepareStatement(sql);
        4. 利用PreparedStatement对象成员方法给占位符(?)赋值
            pstmt.setXxx(参数1, 参数2);
                Xxx:代表设置的数据类型
                参数1:代表第几个占位符(?),从1开始
                参数2:代表该占位符的值
        5. 执行sql,此时执行不再需要传递参数,直接调用相应的execute成员函数
        6. 数据库的增删查改都将使用PreparedStatement对象执行sql语句,保证安全性
  1. JDBC事务管理
1. 使用Connection方法管理事务
    a. 开启事务:
        void setAutoCommit(boolean autoCommit);// 调用该方法设置为false,即开启事务,即关闭自动提交
    b. 提交事务:
        void commit();
    c. 回滚:
        void rollback();
2. 使用步骤:
    a. 在获取到连接后执行sql前开启一个事务
    b. 在完成一个事务后,提交事务
    c.catch到异常<此处应该是Exception,即不论发生什么异常都要回滚>时,在catch内进行回滚操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值