• JDBC---后端服务器与数据库交互的桥梁


    Java数据库连接技术:通过Java程序从数据库中把相应的数据提取到java程序中

    1.JDBC概念

    2. JDBC的步骤

    1) 导入数据驱动jar

    ① 右键项目名称/新建一个文件夹folder,名字叫lib

    ② *.jarcopylib目录下

    ③ 右键*.jar/Build path/Add Build Path *.jar加入到项目构建路径中

    2) JDBC执行过程

    通过反射类加载classforname()把mysql提供的驱动类注册到java里面去

    3) JDBC-CRUD操作

    ① insertupdatedelete语句执行过程一样

    select语句需要处理ResultSet结果集

    ③ 资源的关闭流程

              try…cathc…finally中确保所有的资源都去关闭一次,关闭顺序,后进来的先关闭

    3. ResultSet数据  

    元数据:描述数据的数据

        Mysql默认数据:用来存储和描述用户创建的数据信息(元数据库)

    rs结果集进行描述的相应数

         getColumnClassName():包路径

         getCatalogName():数据库的名字

         getColumnCount():列数

         getColumnLabel():id

         getColumnName():sid

         getColumnType():int

         getColumnTypeName():INTEGER

    4. PreparedStatement对象

    ① sql注入

       在传入到sql参数的值中恶意加入相应的sql不能识别的字符导致程序运行时出错

    ② Statement对象分析

       此对象执行sql中的参数只能随着sql语句一起赋值,只能执行一个完整的sql语句。当sql中出现了异常字符此对象当做sql中的一个字符处理,影响sql语句的正常执行。

       此对象不能防止sql注入,安全性相对低

       此对象不会缓存执行计划,执行性能相对较低

    ③ PreparedStatement对象分析

       此对象创建的同时构建sql语句,sql语句的参数通过占位符(?)的方式进行说明,并无需传入实际参数值,可通过对象的set方法对占位符参数进行赋值,赋值时只会把传入的值当做sql中的参数值处理,不会把直接插入到sql语句中,防止异常字符插入到原始sql语句中,破坏sql结构。

      此对象能够防止sql注入,安全性相对较高

      在创建对象时根据传入的sql语句进行预编译(创建当前sql的执行计划,sql有哪些条件,查询或修改的字段….),执行计划会被保存在此对象中,下一次如果有同样的sql执行,这无需重新编译(执行计划),直接运行。当前计划可以被多次高效执行。

     

    5. JDBC工具类封装

    6. 单例设计模式

    只对外创建一个实例

    7. 属性文件的封装---数据库的优化

        数据库的配置文件:databases.properties,不用修改源代码

    通过系统全局配置文件配置系统中相应参数

    通过java提供的Properties类进行属性文件的加载

    过程:

      ① src目录下(classes目录)创建一个属性文件config.properties

     ② 创建一个Config.java类,加载属性文件并对外提供属性值

      ③ 项目通过Config类调用其对外提供的属性获取属性值

    DAO模式(中转器)--数据库数据封装为对象数据

       1.减少代码量,解决重复的工作,减少代码冗余

       2.方便后期维护

    根本思想:将数据访问  数据封装  方法处理分开

      目的:方便维护,减少代码冗余

       -1.创建实体类( 负责数据封装)

          将数据库数据封装为对象数据

       -2.创建对应实体类的接口(xxxxDAO

          提供必需实现的方法

       -3.实现对应类的接口方法(xxxxDAOImpl)

          xxxxDAOImpl implements xxxxDAO

    8. JDBCcrud操作的封装

          需求:对表的修改操作非常频繁,如有几十张表的操作

          是否可以把所有的修改操作封装成一个函数?

          查询是否也可以封装一个方法:对任意表都可以查询

    先想思路…

    1) 修改操作的封装

    ① 分析

       要的结果:int  对表影响的记录条数

       int I = pstmt.executeupdate();

             创建pstmt对象

                  Pstmt = Conn.prepareStatement(sql)  // sql中参数  可变长参数 Object

       sql参数赋值

            Pstmt.setxxx(name,value)

    ② 实现

    2) 查询操作的封装

          需求:能够对任意表的查询,返回List<T>

    ① 分析

       要的结果:List<T> list

                 List.add(Object)

                 While(rs.next()){

        // 获取每一行数据

        // 封装成object

        问题:如何把值复制给对象对应的属性  BeanUtils

    }

    Rs = pstmt.executequery();

    得到rs对象和修改的封装一致

  • 相关阅读:
    《C++必知必会》读书笔记
    看美图是一种享受
    C指针-指向另一指针的指针
    顺序队列基本操作
    Using Windows Live Writer to write first offline blog
    堆和栈的区别 [摘录]
    进程与线程的区别
    《Effective C#》
    析构函数virtual与非virtual区别
    常用SQL语句技法
  • 原文地址:https://www.cnblogs.com/dulute/p/11340287.html
Copyright © 2020-2023  润新知