1、 PreparedStatement的使用
一、为什么要使用PreparedStatement
登录使用 Statement 会出现SQL注入问题
例如:密码设置为 ’ OR 1=1 OR ’ 则可以测试SQL注入效果
二、 PreparedStatement的使用
可以使用SQL语句模板
对应的值使用 ? 占位
不要忘了?中的值后期需要进行设置
三、 PreparedStatement与Statement对比
PreparedStatement : 预处理语句对象
1 允许咱们写SQL模板 可以避免字符串拼接的麻烦 造成注意 : ? 只能要特定的地方写
2 避免SQL注入问题(只要拼接字符就会SQL注入的危险)
3 PreparedStatement 在某些数据库中性能比 Statement 更好
2、事物
事务的四大特性(ACID)
原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操 作要么都发生,要么都不发生。
**一致性(Consistency)**事务前后数据的完整性必须保持一致。
**隔离性(Isolation)**事务的隔离性是多个用户并发访问数据库时,数据库为每 一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要 相互隔离。
**持久性(Durability)**持久性是指一个事务一旦被提交,它对数据库中数据的改 变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
3、返回主键
在添加数据后,会将该条数据的主键值返回, 功能关键 : Statement.RETURN_GENERATED_KEYS
public class HW3 {
@Test
public void testPK() throws Exception {
Connection conn = JDBCUtil.getConnection();
PreparedStatement pr = conn.prepareStatement("insert into people (name,password) values (?,?)",
Statement.RETURN_GENERATED_KEYS);
pr.setString(1, "麦克格雷迪");
pr.setString(2, "1");
pr.executeUpdate();
ResultSet ge = pr.getGeneratedKeys();
while (ge.next()) {
System.out.println(ge.getLong(1));
}
JDBCUtil.close(ge, pr, conn);
}
}
4、连接池
就是装连接对象的容器,可以极大的提升咱们操作数据库的性能
1、四大金刚(必备)
- 驱动名称
driverClassName
- 地址路径
url
- 用户名
username
- 密码
password
2、其他常用属性
- 初始连接数
initialSize
- 最大连接数
MaxActive
- 最大等待时间
maxWait
- …
3、DBCP功能实现
①、导包:
commons-dbcp-1.4.jar
: 数据源的功能包
commons-pool-1.5.6.jar` : 池子包
②、准备jdbc.properties
③、使用关键对象:BasicDataSource
/ 使用BasicDataSourceFactory
工厂一步到位
④、DBCPUtil
: 连接池工具类