JDBC(五大流程)
注册驱动
获取连接(具备了连接数据库的条件)
就是通过驱动管理器里的驱动程序,连接数据库,连接数据库完成,就会返回Connection对象
获取发送SQL语句对象(交通工具)
处理结果集
索引从1开始
释放资源
完成JDBC增删改查操作
向数据库增加数据
向数据库修改数据
从数据库根据ID删除数据
从数据库根据ID查询某条数据
抽取工具类
1.new一个配置文件
2.使用单例设计模式来加载配置文件
3.封装数据库基类BaseDao
JDBC预处理对象(PreparedSatement)
PreparedStatement是Statement接口的子接口
PreparedSatement的执行原理
我们写的SQL语句让数据库执行,数据库不是直接执行SQL语句字符串。和Java一样,数据库需要执行编译后的SQL语句(类似Java编译后的字节码文件)。
1、Statement 对象每执行一条SQL语句都会先将这条SQL语句发送给数据库编译,数据库再执行。
上面2条SQL语句我们可以看到大部分内容是相同的,只是数据略有不一样。数据库每次执行都编译一次。
如果有1万条类似的SQL语句,数据库需要编译1万次,执行1万次,显然效率就低了
2、 prepareStatement() 会先将SQL语句发送给数据库预编译。 PreparedStatement 会引用着预编译后的结果。
可以多次传入不同的参数给 PreparedStatement 对象并执行。相当于调用方法多次传入不同的参数。
上面预编译好一条SQL,2次传入了不同的参数并执行。如果有1万条类似的插入数据的语句。数据库只需要预编译一次,传入1万次不同的参数并执行。减少了SQL语句的编译次数,提高了执行效率。
PreparedSatement的好处
- prepareStatement() 会先将SQL语句发送给数据库预编译。 PreparedStatement 会引用着预编译后的结果。
可以多次传入不同的参数给 PreparedStatement 对象并执行。减少SQL编译次数,提高效率。 - 安全性更高,没有SQL注入的隐患。(改善登录案例)
- 提高了程序的可读性
PreparedStatement 的使用
解决SQL注入问题
我们让用户输入的密码和SQL语句进行字符串拼接。用户输入的内容作为了SQL语句语法的一部分,改变了原有SQL真正的意义,以上问题称为SQL注入。 要解决SQL注入就不能让用户输入的密码和我们的SQL语句进行简单的字符串拼接
使用字符串拼接出现的问题
使用Satement的子类PreparedSatement来解决