JDBC

作者: 奥利夫羊 | 来源:发表于2020-09-03 18:04 被阅读0次

    JDBC

    Java连接步骤

    // 1. 加载驱动
    
    Class.forName("com.mysql.cj.jdbc.Driver");
    
    // 2. 用户信息和数据库地址
    // useUnicode=true&characterEncoding=utf8&useSSL=true
    
    String url = "jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
    String username = "root";
    String password = "123456";
    
    // 3. 获取数据库对象
    
    Connection connection = DriverManager.getConnection(url,username,password);
    
    // 4. 执行SQL的对象
    
    Statement statement = connection.createStatement();
    
    // 5. 获得结果
    
    String sql = "SELECT * FROM account";
    ResultSet resultSet = statement.executeQuery(
        sql
    );
    while (resultSet.next()) {
        System.out.println("id:" + resultSet.getObject("id"));
        System.out.println("name:" + resultSet.getObject("name"));
        System.out.println("cash:" + resultSet.getObject("cash"));
    }
    System.out.println(resultSet);
    // 6. 释放连接
    resultSet.close();
    statement.close();
    connection.close();
    
    1. 加载驱动

      加载驱动方法:Class.forName("com.mysql.cj.jdbc.Driver");

      //Dirver类里面只有一个静态代码块,在加载的时候自动通过DriverManager注册了驱动
      public class Driver extends NonRegisteringDriver implements java.sql.Driver {
          public Driver() throws SQLException {
          }
      
          static {
              try {
                  DriverManager.registerDriver(new Driver());
              } catch (SQLException var1) {
                  throw new RuntimeException("Can't register driver!");
              }
          }
      }
      
    2. 用户信息和数据库地址

      连接URL

      MySQL jdbc:mysql://(数据库地址):3306/(数据库)参数=值&参数=值&...
      Oracle jdbc:oracle:thin@(数据库地址):1521/(数据表)

      常用URL

      useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC

    3. 获取数据库对象

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

      获得连接对象,Connection代表数据库

      connection.setAutoCommit();     // 设置自动提交
      connection.commit();            // 提交
      connection.rollback();          // 回滚
      
    4. 执行SQL的对象

      Statement执行SQL的对象

      • Statement statement = connection.createStatement();

      PrepareStatement执行SQL的对象

      • PrepareStatement prepareStatement = connection.prepareStatement()
      // Statement的用法
      statement.executeQuery();   // 查询操作,返回ResultSet
      statement.execute();        // 执行任何SQL,返回执行的结果boolean
      statement.executeUpdate();  // 更新插入删除,返回一个受影响的行数
      statement.executeBatch()    // 执行一系列的SQL
          
          
      // 使用executeQuery操作增删改操作报错:Can not issue data manipulation statements with executeQuery().
      
      PrepareStatement的用法(效率更高,可以防止SQL注入,转义字符直接被转义)
      String sql = "INSERT INTO ACCOUNT(`name`,`cash`) VALUES(?,?)"; // 使用问号占位符代替参数
      PrepareStatement prepareStatement = connection.prepareStatement(sql) // 预编译SQL
      preparedStatement = conn.prepareStatement(sql);
      preparedStatement.setString(1,"yhq");
      preparedStatement.setBigDecimal(2,new BigDecimal(1000.00));
      preparedStatement.executeUpdate(); // 无需参数,其它查询同Statement
      
    5. 获得结果

      ResultSet类              // 是查询获得的结果集合
      resultSet.getObject()   // 在不知道类型的情况下使用
      resultSet.afterLast()   // 移动到最后面
      resultSet.beforeFirst() // 移动到最前面
      resultSet.next()        // 移动到下一个
      resultSet.previous()    // 移动到上一个
      resultSet.absolute(row) // 移动到指定行
      
    6. 释放连接

      resultSet.close();
      statement.close();
      connection.close();
      
    7. 操作事务

      connection.setAutoCommit(false); //关闭自动提交,自动开启事务
      connection.commit(); // 默认不成功回滚,也可以在catch里面显式定义
      
      

    try {
        conn = JdbcUtils.getConnection();
        conn.setAutoCommit(false); //关闭自动提交,自动开启事务
        
        // 数据库操作逻辑代码
        
        conn.commit();
    } catch (Exception e) {
        // 默认回滚
        e.printStackTrace();
        try { //显式定义回滚
            conn.rollback();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    } finally {
        释放资源;
    }
    ```
    
    1. 数据库连接池

      数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

      • 连接池实现了DataSource接口

      • 开源数据源实现:DBCPC3P0Druid

      • 使用连接池之后,开发中就不需要写连接服务代码了

    相关文章

      网友评论

          本文标题:JDBC

          本文链接:https://www.haomeiwen.com/subject/drozdktx.html