Web阶段day05(JDBC、SQL注入、JDBC批处理、DBCP、C3P0)

day05
1.JDBC
注册数据库驱动
获取数据库连接
创建传输器
传输sql并返回结果
遍历结果
关闭资源

2.SQL注入攻击(XXX’#)
由于SQL语句的参数是由前台页面发送到后台,sql语句是在后台拼接而来,在拼接的过程中,用户数据了数据库的关键字符,导致sql语句的语义发生了变化,这种攻击方式称之为sql注入攻击。
PreparedStatemnet
有预编译功能。
发送sql语句:
第一步:将sql语句的主干部分发送到数据库。主干部分的参数使用问号预留。
例:select * from user where username = ? and password = ?
sql语句到达数据库后,会变成一段机器码(一段二进制数据)
第二步:将sql语句的参数发送到数据库。参数在发送到数据库后,会看做是纯文本的内容来使用。
在sql语句的主干和参数发送完成之后,需要通知数据库服务器执行sql。
通知方式:
preparedstatement.executeQuery();
preparedstatement.executeUpdate();

3.JDBC中的批处理机制。
实现批处理有两种方式,
第一种方式:statement批处理
Statement.addBatch(sql)
执行批处理SQL语句
executeBatch()方法:执行批处理命令
clearBatch()方法:清除批处理命令
优点:可以执行多条不同结构的sql语句。
缺点:没有使用输出编译机制,效率低下,如果要执行多条结构相同,仅参数不同的语句时,任然需要多次写sql语句的主干。
第二种方式:preparedstatement批处理
优点:有预编译机制,效率比较高,执行多条结构相同,参数不同的sql时,不需要重复写sql的主干。
缺点:只能执行主干相同参数不同的sql,没有办法在一个批处理中加入结构不同的sql。

4.连接池
(1)DBCP连接池
DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库
DBCP示例代码:
static{
InputStream in = JdbcUtil.class.getClassLoader().
getResourceAsStream(“dbcpconfig.properties”);
Properties prop = new Properties();
prop.load(in);
BasicDataSourceFactory factory = new BasicDataSourceFactory();
dataSource = factory.createDataSource(prop);
}
(2)C3P0连接池

	C3P0配置:
	方式一:
	文件名:c3p0-config.xml
	文件内容:
		<?xml version="1.0" encoding="UTF-8"?>
		<c3p0-config>
		  <default-config>
		    <property name="driverClass">com.mysql.jdbc.Driver</property>
		    <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
		    <property name="user">root</property>
		    <property name="password">root</property>
		  </default-config>
		</c3p0-config>
	方式二:
	文件名:c3p0.properties
		c3p0.driverClass=com.mysql.jdbc.Driver
		c3p0.jdbcUrl=jdbc:mysql://localhost:3306/jdbc
		c3p0.user=root
		c3p0.password=root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值