JDBC

 复习操作:1、JDBC的增删改查(用preparestatement)2、转账案例实现事务管理。3、封装 Druid的工具类。4、实现JdbcTemplate的CRUD和所有方法。

JDBC:

JDBC: Java Database Connectivity  -  Java数据库连接,用Java操作数据库。

JDBC本质:其实是官方定义的一套操作所有关系型数据库的规则,即接口。由各个数据库厂商实现接口,提供数据库驱动jar包。

JDBC快速入门:

1、步骤:导入驱动jar包 -- 复制jar包到libs目录下,右键 -- add as library 

      注册驱动 -- 获取数据库连接对象Connection -- 定义sql -- 获取执行sql语句的对象                             statement -- 执行sql 返回结果 ,处理结果 -- 释放资源

2、详解各个对象。

  1、DriverManager:驱动管理对象

    * :功能:1、注册驱动:告诉程序该使用哪一个数据驱动jar

               static void registerDriver(Driver driver)- 注册DriverManager

                  写代码使用:Class.forName(mysql.jdbc.Driver)

               原理:上面的方法存在于静态代码块中,加载类时就自动创建

               注意:MySQL5之后的jar包可以省略该步骤。

           2、 获取数据库连接:方法:static Connection getConnection(String url,                           String user ,String password)

                      参数:url:指定连接的路径 jdbc:mysql://ip:端口/数据库名

  2、Connection:数据库连接对象

    * : 功能:1、获取执行sql的对象: Statement createStatement()、PreparedStatement                                                            (String sql)

         2、管理事务:开启事务:setAutoCommit(boolean autoCommit) 为false时开启

               提交事务:commit()

                回滚事务:rollback()

  3、Statement:执行sql的对象

    * :执行sql:1、int executeUpdate(String sql):执行insert、update、delete等语句。

            返回受影响的行数,可以判断sql是否执行成功。

           2、ResultSet executeQuery(String sql):执行select语句。

    * :练习:增删改查语句。

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

    *  next():游标指向下一行(默认指向列名这行)

    * getXXX():获取数据。XXX:int-代表列的编号。String-列名。

    * 用法:指向下一行-判断是否有数据-获取数据   循环操作

  5、PreparedStatement:执行sql的对象

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

    * 解决sql注入:使用PreparedStatement 对象来解决。

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

    * 步骤:修改上面的步骤。

      1、定义sql时,参数用?代替:select * from user where id=?;

      2、获取sql语句的对象改为:PreparedStatement -->Connection.prepareStatement                                   (String sql)

      3、给?赋值:方法:setxxx(参数1,参数2)参数1:?的位置 。 参数2:?的值。

JDBC控制事务:

使用Connection来操作:

  开启事务:setAutoCommit(boolean autoCommit) 为false时开启 。执行sql前

  提交事务:commit() 所有sql执行完

  回滚事务:rollback() 放catch里。

数据库连接池。

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

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

2、好处:1、节约资源。 2、用户访问效率高。

数据库连接池实现。

1、标准接口:DataSource     javax.sql包下。

  * 方法:获取连接:getConnection()

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

2、连接池技术:

  * C3P0 :

  * Druid:阿里提供。

3、C3P0。

  * 使用步骤:1、导包 c3p0-0.9.5.2.jar  和  mchange-commons-java-0.2.11.jar

          2、定义配置文件:名称:c3p0.propertiesc3p0-config.xml 路径:src下。

        3、创建核心对象:数据库连接池对象 ComboPooledDataSource 

        4、获取连接:getConnection

4、Druid。

  * 使用步骤:1、导包 druid-1.0.9.jar

        2、定义配置文件:druid.properties 

        3、加载配置文件:

        3、获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory

        4、获取连接:getConnection

    public static void main(String[] args) throws Exception {
        Properties pro=new Properties();
        InputStream is= druid.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        DataSource ds= DruidDataSourceFactory.createDataSource(pro);
        Connection connection=ds.getConnection();
        System.out.println(connection);
    }
}

 Spring  JDBC:

Spring JDBC: Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

使用步骤:1、导包

     2、创建JdbcTemplate对象。它依赖于DataSource- new JdbcTemplate(ds)。

     3、调用JdbcTemplate的方法来CRUD:

        * update():执行DML语句。

        * queryForMap(): 查询结果封装为map集合。【只能查询一条记录】

        * queryForList(): 查询结果封装为list集合。【装的是多个Map的集合】

        * query():查询结果封装为JavaBean对象。

             query(sql, new BeanPropertyRowMapper<account>(account.class))

        * queryForObject:查询结果封装为对象。

          查询总记录数:Long count = template.queryForObject(sql, Long.class);

原文地址:https://www.cnblogs.com/zhangyuhao/p/10945829.html