第三十七天

1.封装JDBC工具类的步骤 ---JdbcUtils

1)准备配置文件 jdbc.properties
    url=jdbc:mysql://localhost:3306/库名
    driverClass=com.mysql.jdbc.Driver
    user=root
    password=123456
2) 当前类中提供静态代码块
static{
    1)读取配置文件
    InputStream inputStream = 前类名.class.getClassLoader().getResourceAsStream("jdbc.properties") ;
    2)创建属性集合列表
    Properties prop = new Properties() ;
    //3)加载字节输入流对象到属性集合列表中
    prop.load(inputStream) ;
    //4)通过key获取value
    //public String getProperty(String key)
    获取四个key----给成员变量进行赋值
    
    5)加载驱动
    Class.forName(驱动类的全限定名称获取到);
}
​
3)静态方法----获取Connection
        Connection conn = DriverManager.getConnection(三个参数直接传进去) ;
4)静态方法--->释放资源 针对DML语句 释放Statment以及Connection
针对DQL语句:释放ResultSet Statement,Connection
    

2.单元测试的使用步骤

1)导入jar包  junit核心包 以及依赖包
2)针对某个类进行---- 单元测试---测试功能
书写方法,上面标记是单元测试方法 @Test---->执行单元测试之前,可以完成初始化操作 @Before标记方法
​
执行单元测试方法执行,释放资源   @After标记的方法中

3.Statement执行对象操作DQL的步骤

//1)通过工具类获取连接对象
Connection conn = JdbcUtils.getConnection();
//2)sql
String sql = "select * from emp " ;
//3)创建执行对象
Statement stmt = conn.createStatement() ;
//4)执行sql
ResultSet rs  = stmt.executeQuery(sql) ;
//5)遍历结果集
while(rs.next()){
    
    //获取数据
    //通过列的索引值获取,第一列就是1,./..
    //第一个id字段 int
   // int id = rs.getInt(1) ;
    //获取通过列的名称获取 
    int id =rs.getInt("id") ;
}

4.如何获取src下面的配置文件.properties内容

InputStream inputStrema = 前类名.class.getClassLoader().getResourceAsStream("jdbc.properties") ;
// 2)创建属性集合列表
    Properties prop = new Properties() ;
    //3)加载字节输入流对象到属性集合列表中
    prop.load(inputStream) ;
    //4)通过key获取value
    //public String getProperty(String key)




今日内容

1. 通过 JDBC 员工表---->通过接口方式---使用单元测试---添加员工类---给员工表插入数据(日期的处理)

2.Statement和PreparedStatement预编译的区别

PreparedStatement使用步骤 ------------以后全部都是用预编译
​
键盘录入用户名和密码,模拟登录操作
如果一致,登录成功;否则,提示登录失败
​
​
SQL注入
通过sql的拼接存在一些问题
用户名和密码存在拼接,非常不安全的行为!
select * from user where username = 'xxx' and password = 'or '1'='1' ;
  • 之前通过sql指令的方式控制事务 (事务:让同时执行多个sql语句要么一块成功,要么一块失败!)

  • 1)开启事务 :start transaction ;

  • 2)执行多个sql语句/或者多张表的sql--添加/删除/修改

  • 3)如果有问题,回滚事务 rollback;

  • 没有问题,提交事务 最终 commit ; * *

  • JDBC方式控制事务

  • java.sql.Connection:

  • void setAutoCommit(boolean autoCommit) throws SQLException 设置提交模式

  • 参数为false,表示禁用自动提交;为true,默认就是自动提交

  • void rollback() throws SQLException 事务回滚,撤销之前的所有更新操作; (前提必须处于手动提交)

  • void commit() throws SQLException 提交事务,将数据永久保存!

3.频繁的去使用DriverManager.getConnection(xx)--->优化

数据库的连接池:------->sun公司同一个接口java.sql.DataSource代替DriverManager
    dbcp
    c3p0
    druid:德鲁伊   阿里提供的插件 (使用这个,为监控而生!)  
            DruidDataSource  实现java.sql.DataSource接口
    
连接池要使用----jdbc.properties文件内容改变了,key的名称必须满足druid连接池中的参数

4.加入连接池之后的JdbcUtils工具类的优化!(最终版)

模拟线程场景,每一个线程都是用自己的连接对象!ThreadLocal<T>

5.开源插件---Commons-DbUtils (项目中使用这个插件)

Apache组织提供 一种开源的原生jdbc的简易封装!---->书写更简单
​
导入jar包---版本1.6---下一次1.7

面试题

Statement和PreparedStatement预编译的区别

  Statement执行sql的效率相对PreparedStatement非常低
    1)每次书写一条sql就需要通过Statmeent将sql语句发送给数据库,效率低;同时,数据库的压力大!
    2)发送的sql语句存在字符串拼接,就会出现安全问题--->SQL注入,恶意攻击数据库,造成安全漏洞!
  PreparedStatement执行sql语句效率相对来说很高
    1)将一条参数化 的sql语句发送给数据库,进行预编译将编译结果存储在预编译对象中,下一次直接赋值,
    而且赋值很多次,发送一次sql,执行不同的参数!
    2)参数化的sql语句不存在支持拼接,有效防止SQL注入,开发中使用PreparedStatement来对数据库CRUD
#德鲁伊的加载驱动的名称driverClassName
driverClassName=com.mysql.jdbc.Driver    
#连接的库的地址
url=jdbc:mysql://localhost:3306/ee_2211_02
#用户名
username=root
#密码
password=123456
#连接池启用之后初始化的连接数量5个
initialSize=5
#连接池中最大激活数量10个
maxActive=10
#最大等待时间 3000毫秒(3秒),当连接池如果中的连接数数量超过了最大就激活数量,等待3秒中连接,如果超过3秒,拒绝连接对象进入连接池
maxWait=3000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值