zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Markdown语法
    IDEA常用快捷键及基本操作
    这一份MySQL书单,可以帮你搞定90%以上的面试题!
    你真的以为计算机网络不重要吗,这份书单帮你搞定相关面试题!
    学好程序员必知必会的数据结构,这一份书单你值得拥有!
    送你一份Redis书单,以后使用缓存的问题不用再问我啦!
    这本最适合夯实基础的经典 Java 书籍,可能80% 的 Java 程序员没有认真看过!
    荐书在精不在多,推荐一份夯实Java基础的必备书单!
    拿万元月薪必备的书单,学JAVA的程序员必看的5本书!
    8岁上海小学生B站教编程惊动苹果,库克亲送生日祝福
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10945829.html
Copyright © 2011-2022 走看看