01-JDBC概述
2.JDBC的理解
简单理解为:JDBC,是SUN提供的一套API,使用这套API可以实现对具体数据库的操作(获取连接、关闭连接、DML、DDL、DCL)
3.好处
从开发程序员的角度:不需要关注具体的数据库的细节。
从数据库厂商的角度:只需要提供标准的具体实现。
4.数据库的驱动:
数据库厂商针对于JDBC这套接口,提供的具体实现类的集合。
03-Statement接口实现CRUD操作()
Statement使用的弊端
Scanner scan = new Scanner(System.in);
String name = scan.next();
....
拼串
String sql = "insert into customers(name,email,birth) values('" + name + "','" + email + "','"" + birth + ')";
SQL注入:
SELECT user,password FROM user_table WHERE user = '1' or ' AND password = '=1 or '1' = '1'
其他问题:
Statement没办法操作Blob类型变量
Statement实现批量插入时,效率较低
04-PrepareStatement替换Statement实现CRUD操作
1.PrepareStatement的理解
①PrepareStatement是Statement的子接口
②预编译SQL语句
③可以解决Statement的sql注入问题,拼串问题
总结
两种思想:
面向接口编程的思想
ORM编程思想
两种技术:
1.使用结果集的元数据:ResultSetMetaData
getColumnCount():获取列数
getColumnLabel:获取列的别名
2.反射的使用(①创建对应的运行时类的对象 ②在运行时,动态的调用指定的运行时类的属性、方法)
05-PrepareStatement可以操作Blob类型的变量。
写入操作的方法:setBlob(InputStream is)
读取操作的方法:
Blob blob = getBlob(int index);
InputStream is = blob.getBinaryStream();
06-测试使用PrepareStatement实现批量操作:
层次一:使用Statement实现
层次二:使用PerpaerStatement替换Statement
层次三:addBatch() / excuteBatch() / clearBatch()
层次四:设置连接不允许自动提交数据
总结:PerparedStatement与Statement的异同?
①指出二者的关系?接口 与 子接口的关系
②开发中,PerparedStatement替换Statement
③PerparedStatement是预编译SQL语句的
07-数据库的事务
事物的数据
四大属性:ACID
1.原子性
2.一致性
3.隔离性
4.持久性
数据操作过程中可能出现的问题:(针对隔离性)
脏读
不可重复读
幻读
数据库的四种隔离级别:(一致性和并发性:一致性越好,并发性越差)
READ UNCOMMITTED(读未提交数据)
READ COMMITTED(读已提交数据)
REPEATABLE READ(可重复读)
SERIALIZABLE(串行化)
08-DAO及其子类
总结:考虑到事务以后的数据库操作(重点)
1.获取数据库的连接
Connection conn = JDBCUtils.getConnection(); //方式1:手动获取连接 方式2:数据库连接池
conn.setAutoCommit(false); //体现事务
2.如下的多个DML操作,作为一个事务出现:
操作1:需要使用通用的增删改查操作 //通用的增删改查操作如何实现?
操作2:需要使用通用的增删改查操作 //方式1:手动使用PreparedStatement实现
操作3:需要使用通用的增删改查操作 //方式2:使用dbutils.jar中QueryRunner类
conn.commit();
3.如果出现异常,则:
conn.rollback();
4.关闭资源
JDBCUtils.closeResource(...,...,...) //方式1:手动关闭资源 //方式2:DbUtils类的关闭方法
09-数据库连接池
2.如何解决传统开发中的数据库连接问题:使用数据库连接池
3.使用数据库连接池的好处:
自己组织语言:
1.提高程序的响应速度(减少了创建连接相应的时间)
2.降低资源的消耗(可以重复使用已经提供好的连接)
3.便于连接的管理
暂无评论