• JDBC连接数据库


    JDBC Java 数据库连接(Java DataBase Connectivity)
    //固定代码
          
          //    1.注册驱动.
          //    告知JVM使用的是哪一个数据库的驱动
            Class.forName("com.mysql.jdbc.Driver");//mysql  驱动类//DriverManager.registerDriver(new Driver());
            // 2.建立连接
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdatabase", "root", "root");
            // 3.编写sql (在java中编写sql语句,结尾可以不加分号)
            String sql = "insert into user values(null,'lucy','666')";
            // 4.获取sql执行对象(小货车)
            Statement statement = connection.createStatement();
            // 5.发送(执行)sql并返回结果
            int i = statement.executeUpdate(sql);
            // 6.处理结果
            if (i > 0) {
                System.out.println("新增成功");
            } else {
                System.out.println("新增失败");
            }
            // 7.释放资源
            statement.close();
            connection.close();

    API介绍

    DriverManager:驱动管理对象【工具类】

    1. 注册驱动
        a)【了解】
            static void registerDriver(Driver driver)  
            我们通过翻看mysql Driver驱动实现类的源码发现了,内部静态代码块已经实现注册驱动功能
                static {
                    try {
                        DriverManager.registerDriver(new Driver());
                    } catch (SQLException var1) {
                        throw new RuntimeException("Can't register driver!");
                    }
                }
        b)反射【掌握】
            Class.forName("com.mysql.jdbc.Driver");
        
    2. 建立连接
            static Connection getConnection(String url, String user, String password)  
        参数说明
            url:建立指定数据库连接的URL地址【固定格式】
                格式:jdbc:mysql://ip地址:端口/数据库名称?useUnicode=true&characterEncoding=UTF-8
      实例: jdbc:mysql://localhost:3306/webdatabase?useUnicode=true&characterEncoding=UTF-8
    jdbc:mysql:///webdatabase   user:用户名 password:密码

    Connection:数据库连接对象

    1. 获取sql执行对象
            Statement createStatement()
            PreparedStatement prepareStatement(String sql)
    
    2. 事务管理
        a)开启事务(关闭自动提交)
            void setAutoCommit(boolean autoCommit)  
                参数:
                    true:自动提交sql【mysql默认值】
                    false:手动提交
        b)提交事务
            void commit()  
        c)回滚事务
            void rollback() 

    Statement:执行(发送)sql语句的对象

    1. 执行所有类型(DDL、DML、DQL)的sql语句
            boolean execute(String sql)  
    ------------------------------------------
    
    2. 用于执行DML类型的sql语句
            int executeUpdate(String sql)  
                参数:insert、delete、update的sql语句
                返回:影响行数
                
    3. 用于执行DQL类型的sql语句
            ResultSet executeQuery(String sql)  
                参数:select的sql语句
                返回:结果集(集合对象)

    增强类 PreparedStatement
    // 1.获取连接
    // 2.编写sql(通过?占位符代替实际参数拼接)
    String sql = "SELECT * FROM `user` WHERE username = ? AND `password` = ?";
    // 3.获取sql预编译执行对象
    PreparedSatement pstmt = conn.prepareStatement(sql);
    // 4.设置占位符实际参数
    pstmt.setString(1,"admin' #");
    pstmt.setObject(2,"");
    // 5.执行sql并返回结果
    ResultSet resultSet = pstmt.executeQuery();

      优点
      1. 防止sql注入,提高程序的安全性
      2. 参数与sql分离,使用 ?占位符,提高sql可读性
      3. 减少编译次数,批量操作时(插入),提高程序高性能
        1. statement对象每次执行sql语句时,都需要进行编译
        2. PreparedSatement对象,只需要预编译一次,相同的sql语句,可以执行多次

    ResultSet:结果集对象,封装查询结果

    1. 指针下移
          boolean  next()
              返回
                  true,此行有数据
                  flase,表示此行没数据
              通常与while循环结合使用,遍历数据
                
    2. 获取数据(key-value)
          T getXxx(int 列编号)
          T getXxx(String 列名)
            
          补充:获取所有的数据类型
              Object getObject(String 列名)
              String getString(String 列名)

    事务操作

    * 事务
        如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
        
    * MySQL操作
        1.开启事务
            begin | start transaction
        2.提交事务
            commit
        3.回顾事务
            rollback
        
    * java操作(使用Connection对象)
        1.关闭自动提交(开启事务)
            void setAutoCommit(false);
        2.提交事务
            void commit();
        3.回顾事务
            void rollback();

    将JDBC封装成独立的方法,方便直接调用

     // 声明数据库配置变量
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        // 加载jdbc.properties配置文件,给变量赋值
        static {
            // SE阶段 new Properties.load();
    
            // sun公司提供,专门加载src目录下的properties类型文件,不需要手写扩展名
            ResourceBundle jdbc = ResourceBundle.getBundle("jdbc");
            driver = jdbc.getString("jdbc.driver");
            url = jdbc.getString("jdbc.url");
            username = jdbc.getString("jdbc.username");
            password = jdbc.getString("jdbc.password");
        }
    
    
        // 1.注册驱动【保证只注册一次】
        static {
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                throw new RuntimeException("注册驱动失败...");
            }
        }
    
        // 2.获取连接
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url, username, password);
        }
    
        // 3.释放资源
        public static void release(ResultSet resultSet, Statement statement, Connection connection) {
            // 关闭ResultSet
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
            // 关闭Statement
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            // 关闭Connection
            if (connection != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        // 方法重载
        public static void release(Statement statement, Connection connection) {
            release(null, statement, connection);
        }
  • 相关阅读:
    从点子到产品
    基础设计模式
    SpringBoot单元测试
    结构化思维
    考试脑科学读书笔记
    爆发式成长的思维
    人人都是产品经理笔记
    文本处理工具awk
    CSP-S2019【绍兴一中集训】
    寒假集训【1.28】
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/10593459.html
Copyright © 2020-2023  润新知