JDBC----笔记

  • JDBC

  概念:java DataBase Connectivity Java数据库链接,Java语言操作数据库
  本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

快速入门

  1.导入驱动jar包 pom依赖
  2.注册驱动
  3.获取数据库链接对象 Connection
  4.定义sql
  5.获取执行sql语句对象Statement
  6.执行sql,接收返回结果
  7.处理结果
  8.释放资源

 

准备

     String driver = "com.mysql.cj.jdbc.Driver";
     String url = "jdbc:mysql://localhost:3306/db_1?useUnicode=true&characterEncoding=UTF-8";
     String username = "dog";
     String password = "cat";

 

1、导入驱动依赖

最新:https://dev.mysql.com/doc/relnotes/connector-j/8.0/en/

1     <dependency>
2         <groupId>mysql</groupId>
3         <artifactId>mysql-connector-java</artifactId>
4         <version>8.0.18</version>
5     </dependency> 

2.注册驱动

Class.forName(driver);

3.获取数据库链接对象 Connection

    Connection connection = DriverManager.getConnection(url, "dog", "cat");

4.定义sql

    String sql = "select username,password from user";

5.获取执行sql语句对象Statement

    Statement statement = connection.createStatement();

6.执行sql,接收返回结果

    ResultSet resultSet = statement.executeQuery(sql);

7.处理结果

        while (resultSet.next()) {
            System.out.print("username: " + resultSet.getString("username"));
            System.out.println("\t\tpassword: " + resultSet.getString("password"));
        }while (resultSet.next()) {
            System.out.print("username: " + resultSet.getString("username"));
            System.out.println("\t\tpassword: " + resultSet.getString("password"));
        }    

8.释放资源

        resultSet.close();
        connection.close();    

 

DriverManager 驱动管理对象
  1.注册驱动
    static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager
    写代码使用 Class.forName("com.mysql.cj.jdbc.Driver")  此段代码可以不写,程序会默认调用此方法
  

   /**
  *com.mysql.cj.jdbc.Driver包中,有此静态代码块
  **/
  static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } }

 

  2.获取数据库连接

public static Connection getConnection(String url, String user, String password) 

 

Connection 数据库连接对象

  1.获取执行sql的对象

Statement createStatement() throws SQLException;

PreparedStatement prepareStatement(String sql) throws SQLException;

 

  2.管理事务

    * 开启事务  setAutoCommit(boolean autoCommit);    false为开启事务   true为关闭事务

    * 提交事务  commit();

    * 回滚事务  rollback();

Statement sql执行对象

  boolean execute(String sql)   可以执行任意的sql

  int executeUpdate(String sql)  执行DML(insert、update、delete)语句,DDL(create、alter、drop)语句

     * 返回值影响的行数

  ResultSet executeQuery(String sql)  执行DQL(select)语句

  存在SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串拼接,会造成安全问题

ResultSet 结果集对象

  next() 游标下移一位

  getXX()  XX可以用getInt(),getString()

PreparedStatement sql执行对象    Statement的子类 

   解决了sql注入问题

  预编译的sql:参数使用 ? 作为占位符

  效率更高

 

JDBC控制事务

1、事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败

2、操作

  • 开启事务     setAutoCommit(false);
  • 提交事务  commit();
  • 回滚事务       rollback

3、使用Connection对象来管理事务

 

数据库连接池

 1.概念 :其实就是一个容器(集合),存放数据库连接的容器

    当系统初始化之后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器

 2.好处

    节约资源

    用户访问效高

 3.实现

  标准接口 DataSource   javax.sql包下的

    方法   

      获取连接  getConnection()

      归还连接  Connection.close();   如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接了,而是归还连接

  一般由数据库厂商来实现   

    C3P0:数据库连接池技术

    Druid:数据库连接池技术,由阿里巴巴提供

posted on 2020-01-02 17:25  你真的是猪吗  阅读(32)  评论(0)    收藏  举报