撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

Statement接口

接口
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

Statement接口作用

		用于进行Java程序和数据库之间的数据传输

具体类有3个实现

		Statement
			用于对数据库进行通用访问,使用的是静态sql
		PreparedStatement
			PreparedStatement 用于预编译模板SQL语句,在运行时接受sql输入参数
		CallableStatement
			要访问数据库存储过程时使用
				也可以接受运行时输入参数。

预编译语句

没有预编译语句时

		没有预编译语句,所有的sql都是进行拼接

撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

预编译语句

		PreparedStatement 用于预编译模板SQL语句
		在性能和代码灵活性上有显著地提高
		PreparedStatement 对象使用 ? 作为占位符,即参数标记;
		使用 setXXX( index,value) 方法将值绑定到参数中
			每个参数标记是其顺序位置引用,注意 index 从 1 开始;

PreparedStatement 对象执行SQL语句
executeQuery()
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

executeUpdate()
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程
注意,它们都没有参数

内部优化

示例图
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

支持优化情况

			MySql不支持
			Oracle支持

更安全

			可以防SQL注入

什么是sql注入

			就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

用户登录
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

为什么PrepareState就能够防注入

			之所以PreparedStatement能防止注入,
			是因为它把单引号转义了,变成了\',
			这样一来,就无法截断SQL语句,进而无法拼接SQL语句 基本上没有办法注入了。

调用存储过程

1.在数据库当中定义一个存储过程
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

2.JDBC调用一个参数的存储过程
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

3.编写输入参数和输出参数的存储过程
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程

4.JDBC调用二个参数的存储过程
撩课-JavaWeb之Statement接口与预编译语句及调用存储过程