1.PreparedStatement的操作步骤
//1)创建数据库的连接对象----加入连接池之后的工具类(通过静态代码块---创建DataSource接口对象) Connection conn = DruidJdbcUtils.getConnection() ; //2)准备参数化的sql语句 String sql = "select * from 表名 where 字段名称 like ?" ; //String sql2 = "insert into/update/delete from .... ; //3)连接对象获取预编译对象同时发送参数化sql到数据库中进行编译 PreparedStatement stmt = conn.preparedStatement(sql) ; //4)准备参数赋值 stmt.setString(1,"%张%") ; //5)在预编译对象中进行参数填充 ResultSet rs = stmt.executeQuery() ;//int count = stmt.executeUpdate() ; //6)遍历结果集 while(rs.next()){ //通过的列的名称或者列的索引值获取.... }
2.数据库连接池的作用
数据库连接池: c3p0 dbcp druid :德鲁伊 1)资源重复利用 使用连接池大大避免了不断的频繁创建连接对象,使用完毕关闭之后,造成的资源销毁大! 2)提高系统的响应速度 在程序启动的时候,提前了准备了的足够的连接对象,存储在"池"中,当用户访问比较多的时候,同时应用,可以直接从 连接池中取出连接对象,执行速度快! 3)控制连接对象 多个连接对象被多个线程在同一时刻使用的时候,连接池中对连接对象进行申请,利用,释放,归还连接池中等待下一次利用
3.Statement和PreparedStatement的区别
Statement对象执行sql语句的是,效率比较低,每一条sql,都必须发送给数据库进行操作,大大增加了数据库的负载! Statement对象执行sql语句---(静态sql语句),存在字符串拼接,就存在非法sql造成恶意攻击数据库,造成sql注入! PrepareStatement提高了sql的执行效率,发送一条参数化的sql,可以不断的重新赋值; 由于参数化的sql语句,里面全部都是占位符号?,不存在sql拼接,有效防止SQL注入!
4.通过DruidDataSourceFactory如何创建数据源
//1)读取连接池的配置文件 InputStream inputStream =当前类名.class.getClassLoader().getResourceAsStream("druid.properties") ; //2)创建属性集合列表 Properties prop = new Properties() ; //3)加载字节输入流到属性列表中 prop.load(inputStream) ; //4)创建数据源 DataSource ds = DruidDataSourceFactory.createDataSource(prop) ; //方法本质就是创建的DruidDataSource子实现类对象
5. 数据库的三大范式以及事务的特点有哪些
1NF:数据库表中的每一列是不能在拆分的原子项!必须为单独的一列 2NF:非主键字段必须完全依赖于主键字段! 满足1NF基础上 1)每一张表描述一件事情 2)非主键字段必须完全依赖于主键字段! 3NF:非主键字段不能产生传递依赖! 通过外键拆分多张表 学生表和选课表 用户表 角色 权限 ---->权限认证----过滤器--->权限框架 SpringSecurity/Shiro 事务的特点ACID 原子性 一致性 隔离性 持久性
今日内容
1.针对预编译对象原生操作方式 -->引入Commons-dbUtils
Apache组织结构提供了开源工具类库,针对原生JDBC的一种简易封装,优化了代码,代码更加简洁!
-
1)导入核心包commons-dbutils-1.6/1.7 .jar
-
2)核心执行器:QueryRunner
-
--->创建这个执行器
-
public QueryRunner(DataSource ds) :指定数据源(连接池中核心参数....)
-
3)准备sql语句
-
String sql = "insert into/update/delete from 增删改查 /"
-
String sql = "select查询语句"
-
4)执行sql
-
---->使用反射完成
2.Commons-Dutils涉及常用的一些API (核心接口) 以及使用
-
核心接口ResultSetHandler
-
org.apache.commons.dbtuls.hadnlers. 下面的所有类都是
-
都是ResultSetHandler它的子实现类
-
BeanListHandler---->将查询的结果集的所有数据封装带List<实体类类型>集合中,
-
BeanHandler----> 将查询的某条记录封装到实体类中
-
ScalarHandler--->将查询的结果集处理的时候返回的单行单列的数据
3.前端三剑客
HTML CSS javascript:js 前端框架 jquery boostrap ----提供视图组件以及全局css样式