PreparedStatement:
SQL注入问题:
在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题;
解决sql注入问题:
使用PreparedStatement对象:
预编译的sql语句的对象;
预编译sql语句:
参数使用?占位符;
步骤:
1.导入驱动;
2.注册驱动;
3.获取连接;
4.定义sql(参数使用?占位符);
5.获取执行对象:
Connection.preparedStatement(sql);
6.给?赋值;
方法:
setXxx(参数1,参数2);
参数1:问号的编号,从1开始;
参数2:问号的值;
7.执行sql,不传递参数;
8.执行结果;
9.释放资源;
JDBC控制事务:
在执行SQL语句之前开启事务;set AutoCommit(false)
在执行所有SQL语句之后提交事务 commit();
catch语句中回滚; rollback()
数据库连接池:
概念:
其实就是一个容器(集合),存放数据库连接的容器;
当系统初始化后,容器被创建,容器中会申请连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完后会将连接对象归还给容器;
好处:
1.节约资源;
2.搞笑;
实现:
1.标准接口:DataSource(javax.sql)
方法:
获取连接:getConnection();
归还连接:如果连接对象是从连接池中获取,直接调用close()即可;
2.一般由数据库厂商实现:
1.C3P0:数据库连接池技术;
2.Druid:数据库连接池技术,由阿里巴巴提供;
C3P0:
步骤:
1.导入两个jar包,和一个驱动;
2.定义配置文件:
名称:c3p0.properties 或 c3p0-config.xml;
路径:放于src下即可;
3.创建核心对象,数据库连接对象CombopooledDataSource,无参构造使用默认配置,带参构造传入使用的配置名;
4.获取连接:
getConnection;