JDBC复习笔记

JDBC
1.JDBC的概述
持久化
概念:把数据保存到可掉电式存储设备中以供之后使用
形式:文件(XML、json、properties、txt等)、数据库等等
对JDBC的理解
独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口
图示理解:看笔记
好处
数据库驱动的概念
数据库厂商针对JDBC这套接口,提供的具体实现类的集合
面下接口编程的思想
相当于我们写那些通用方法的时候都是用sum公司提供的API,不用第三方提供的API。这样我们的代码会具有很强的可移植性。
2.获取数据库连接
获取连接需要四个基本信息
Driver实现类(即第三方驱动)
URL
用户名
密码
五种连接方式
方式1~方式4:略
方式5:看笔记
注意我们后面几个连接方式是用了配置文件的
你获取配置文件有两个方式
new FileInputStream(“E:\IdeaProjects\JavaSE_code\jdbc\src\jdbc1.properties”);
ConnectionTest.class.getClassLoader().getResourceAsStream(“jdbc1.properties”);
3.使用PreparedStatement实现CRUD操作
使用JDBC的流程
图片:看笔记
Statement的弊端
问题一:存在拼串操作,繁琐(就是得用+把sql语句的字符串拼接起来,然后把整个字符串拿来使用)
问题二:存在SQL注入问题(重点)
例子:SELECT user,password FROM user_table WHERE USER = ‘1’ or ’ AND PASSWORD = ‘=‘1’ or ‘1’ = ‘1’;。其中1’ or 和=‘1’ or ‘1’ = '1是你输入的
其他问题:不能操作blob类型的字段,Statement执行批量插入的时候效率比较低
PreparedStatement
对PreparedStatement的理解
Statement的一个子接口
传递一个预编译的sql语句
使用PreparedStatement来做增删改查
看笔记
可以操作Blob类型字段
可以实现批量插入
PreparedStatement vs Statement
看笔记
两种思想:ORM思想(object relational mapping)和面向接口编程的思想
看笔记
两种技术:元数据和反射
看笔记
4.操作BLOB类型字段
写数据
主要涉及到了PreparedStatement类的setBlob(int, inputstream)方法
读数据
主要涉及到Blob photo = rs.getBlob(“photo”)和is = photo.getBinaryStream();方法
注意事项:要是插入报xxx too large异常,需要改配置文件,具体看笔记
9.Apache-DBUtils
替代自己写的增删改查语句
使用看笔记
DbUtils工具类来替代关闭资源
8.数据库连接池
使用数据库连接池的好处
1.提高程序的响应速度(减少了创建连接相应的时间) 2.降低资源的消耗(可以重复使用已经提供好的连接) 3.便于连接的管理
传统连接的弊端
每次向数据库建立连接的时候都要将 Connection 加载到内存中,然后验证用户名和密码,并且用完就关闭连接,数据库的连接资源并没有得到很好的重复利用
对于每一次数据库连接,使用完后都得断开。如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库
这种开发不能控制被创建的连接对象数,不利于管理
多种开源的数据库连接池
DBCP(重点)
代码看笔记
C3P0(重点)
代码看笔记
Proxool
BoneCP
Druid(重点)
代码看笔记
数据库连接池可以取代自己写连接
7.DAO类
这个看笔记就行了,没有太多好讲的
6.数据库事务
事务的概念
是一组逻辑操作单元,使数据从一种状态变换到另一种状态。一组逻辑操作单元指的是:一个或多个增删改语句
事务的处理原则
要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
加入事务后的通用的增删改查方法怎么写
连接我们放到方法外面传入,连接的关闭也放在方法的外面,方法外面连接开始的语句后面要把自动提交给关闭,具体看笔记
有一点建议:就是如果我们用到了数据库连接池技术,那么建议在连接关闭前我们得把自动提交重新打开,原因看数据库常量池技术。
ACID
这个前面学MySQL的时候讲过,略
并发问题:脏读、不可重复读、幻读。具体的略,MySQL的时候讲过
四种隔离级别
略,MySQL讲过
考虑到事务后使用JDBC的步骤
1.获取数据库的连接且conn. setAutoCommit(false);
方式1:手动获取连接方式2:数据库连接池
2.如下的多个DML操作,作为一个事务出现:
方式1:手动使用PreparedStatement实现方式2:使用dbutils.jar中QueryRunner类
3.conn. commit();
4.如果出现异常,则:conn.rollback();
5.关闭资源
方式1:手动关闭资源方式2:DbUtils类的关闭方法
5.批量插入
四个层次的写法
1.使用Statement,代码略
2.使用PreparedStatement实现,代码看笔记
3.使用addBatch()、executeBatch()、clearBatch(),代价看笔记
4.在3的基础上设置不允许自动提交,代码看笔记

你可能感兴趣的:(数据库,sql,mysql)