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对象和修改的封装一致

 

posted @ 2019-08-12 15:12  小小超plus  阅读(984)  评论(0编辑  收藏  举报