一、疾速入门

    // 1.注册驱动 能够省略不写    //Class.forName("com.mysql.jdbc.Driver");    //2.获取连贯    String url = "jdbc:mysql://127.0.0.1:3306/db1?useSSL=true";    String username = "root";    String password = "root";    Connection conn = DriverManager.getConnection(url, username, password);    //3.定义sql    String sql = "update dept set loc = '厦门' where id = 10";    //4.获取执行sql的对象statement 其实就是编译    Statement stmt = conn.createStatement();    //5.执行sql    int count = stmt.executeUpdate(sql);    //6.处理结果    System.out.println(count);    //7,开释资源    stmt.close();    conn.close();

二、JDBC API详解
2.1、DriverManager

作用:     1、用于注册驱动        MySQL 5之后的驱动包,能够省略1注册驱动的步骤,因为程序会主动加载。     2、获取数据库连贯        参数阐明:url:示意连贯的数据库的门路。            语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2…            示例:jdbc:mysql://127.0.0.1:3306/db1            留神:1、如果连贯的是本机mysql服务器,并且mysql服务默认端口是3306,则url能够简写为:jdbc:mysql:///数据库名称?参数键值对。                 2、配置 useSSL=false 参数,禁用平安连贯形式,解决正告提醒                    示例:jdbc:mysql://127.0.0.1:3306/db1?useSSL=false;

2.2、Connection

作用:    1、获取执行 SQL 的对象        1.1、一般执行SQL对象            Statement createStatement() //入门案例中就是通过该办法获取的执行对象。        1.2、预编译SQL的执行SQL对象            PreparedStatement prepareStatement(sql) // 通过这种形式获取的 PreparedStatement SQL语句考研避免SQL注入            1.2.1、什么是SQL注入,为什么能够应用SQL注入来破解登录?                SQL注入就是指:通过操作输出来批改当时定义好的SQL语句,用以达到执行代码对服务器进行攻打的办法。因为一般执行SQL对象是间接将用户名和明码拼接到sql语句中。                当password = ''or '1' = '1'时,sql语句拼接完后为:select * from tb_user where username = 'sjdljfld'and password = ''or '1' = '1',恒成立;            1.2.2、为什么PreparedStatement能够避免sql注入?                PreparedStatement应用占位符?来代替username和password,可能将敏感字符进行转译,而且还能够预编译SQL,进步性能。                                    2、治理事务(MySQL默认是主动提交事务)        开启事务 : BEGIN; 或者 START TRANSACTION;        提交事务 : COMMIT;        回滚事务 : ROLLBACK;            通常状况,爱护事务的代码要应用try-catch实现,如果try中的代码全副都可能顺利执行,则提交事务。否则,事务将回滚,整个try中的代码复原到执行前的状态。        具体实现代码:        try {               // ============开启事务==========               conn.setAutoCommit(false);               // 执行sql                int count1 = stmt.executeUpdate(sql1);//受影响的行数               // 处理结果               System.out.println(count1);                int i = 3/0; //出现异常的代码               // 执行sql                int count2 = stmt.executeUpdate(sql2);//受影响的行数               // 处理结果               System.out.println(count2);               // ============提交事务==========               //程序运行到此处,阐明没有呈现任何问题,则需要提交事务               conn.commit();           } catch (Exception e) {               // ============回滚事务==========               //程序在出现异常时会执行到这个中央,此时就须要回滚事务               conn.rollback();               e.printStackTrace();               }

2.3、ResultSet

    作用:用于封装了SQL查问语句的后果。    boolean next()        将光标从以后地位向前挪动一行,判断以后行是否为无效行        办法返回值阐明:            true : 无效航,以后行有数据            false : 有效行,以后行没有数据    xxx getXxx(参数):获取数据        xxx : 数据类型;如: int getInt(参数) ;String getString(参数)        参数:            int类型的参数:列的编号,从1开始            String类型的参数: 列的名称    代码实现:查问account账户表数据,封装为Account对象中,并且存储到ArrayList汇合中。      /**        * 1. 定义实体类Account        * 2. 查问数据,封装到Account对象中        * 3. 将Account对象存入ArrayList汇合中        */      @Test      public void testResultSet2() throws  Exception {          //1. 注册驱动          //Class.forName("com.mysql.jdbc.Driver");          //2. 获取连贯:如果连贯的是本机mysql并且端口是默认的3306 能够简化书写          String url = "jdbc:mysql:///db1?useSSL=false";          String username = "root";          String password = "1234";          Connection conn = DriverManager.getConnection(url, username,password);          //3. 定义sql          String sql = "select * from account";          //4. 获取statement对象          Statement stmt = conn.createStatement();          //5. 执行sql          ResultSet rs = stmt.executeQuery(sql);          // 创立汇合          List<Account> list = new ArrayList<>();          // 6.1 光标向下挪动一行,并且判断以后行是否有数据          while (rs.next()){              Account account = new Account();              //6.2 获取数据 getXxx()              int id = rs.getInt("id");              String name = rs.getString("name");              double money = rs.getDouble("money");              //赋值              account.setId(id);              account.setName(name);              account.setMoney(money);              // 存入汇合              list.add(account);         }          System.out.println(list);          //7. 开释资源          rs.close();          stmt.close();          conn.close();      }

三、数据库连接池

作用:进步工作效率罕用的数据库连接池:Driud配置文件driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=trueusername=rootpassword=1234# 初始化连贯数量initialSize=5# 最大连接数maxActive=10# 最大等待时间maxWait=3000代码演示:/*** Druid数据库连接池演示*/public class DruidDemo {    public static void main(String[] args) throwsException {        //1.导入jar包        //2.定义配置文件        //3. 加载配置文件        Properties prop = new Properties();        prop.load(new FileInputStream("jdbcdemo/src/druid.properties"));        //4. 获取连接池对象        DataSource dataSource=DruidDataSourceFactory.createDataSource(prop);        //5. 获取数据库连贯 Connection        Connection connection =dataSource.getConnection();        System.out.println(connection); //获取到了连贯后就能够持续做其余操作了   }}