JDBC和数据库连接池学习笔记
来源:互联网 发布:php 下载文件到服务器 编辑:程序博客网 时间:2024/05/16 18:40
Java database connection java数据库连接.数据库管理系统(mysql oracle等)很多,每个数据库管理系统支持的命令是不一样的。
Java只定义接口,让数据库厂商自己实现接口,对于我们而言。只需要导入对应厂商开发的实现即可。然后以接口方式进行调用.(mysql + mysql驱动(实现)+jdbc)
简单的jdbc的程序,访问oracle数据的jdbc程序
加载驱动(com.mysql.jdbc.Driver,oracle.jdbc.driver.OracleDriver)
获取连接(DriverManager.getConnection(url,username,password))
设置参数 Statement PreparedStatement
cstmt.setXXX(index, value);
执行 executeQuery executeUpdate
释放连接(是否连接要从小到大,必须放到finnaly)
JDBC中的PreparedStatement相比Statement的好处
大多数我们都使用PreparedStatement代替Statement
- PreparedStatement是预编译的,比Statement速度快
- 代码的可读性和可维护性
虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')"); perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");perstmt.setString(1,var1);perstmt.setString(2,var2);perstmt.setString(3,var3);perstmt.setString(4,var4);perstmt.executeUpdate();
- 安全性
PreparedStatement可以防止SQL注入攻击,而Statement却不能。比如说:
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[’ or ‘1’ = ‘1]作为varpasswd传入进来.用户名随意,看看会成为什么?
select * from tb_name = ‘随意’ and passwd = ” or ‘1’ = ‘1’;
因为’1’=’1’肯定成立,所以可以任何通过验证,更有甚者:
把[‘;drop table tb_name;]作为varpasswd传入进来,则:
select * from tb_name = ‘随意’ and passwd = ”;drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行。
而如果你使用预编译语句你传入的任何内容就不会和原来的语句发生任何匹配的关系,只要全使用预编译语句你就用不着对传入的数据做任何过虑。而如果使用普通的statement,有可能要对drop等做费尽心机的判断和过虑。
数据库连接池作用
- 限定数据库的个数,不会导致由于数据库连接过多导致系统运行缓慢或崩溃
- 数据库连接不需要每次都去创建或销毁,节约了资源
- 数据库连接不需要每次都去创建,响应时间更快。
- JDBC和数据库连接池学习笔记
- JDBC学习笔记—数据库连接池(DBCP和C3P0)
- Java学习笔记4-JDBC数据库连接池
- JDBC学习笔记(二)--数据库连接池 DBCP数据源
- JDBC学习笔记(6)之数据库连接池实现
- JDBC编程学习笔记之数据库连接池的实现
- JDBC学习笔记(8)——数据库连接池(dbcp&C3P0)
- JAVA学习笔记(五十)- JDBC Java数据库连接
- 数据库连接池和jdbc优化
- JDBC编程和数据库连接池
- Java学习笔记1-JDBC数据库连接和无参存储过程
- JDBC笔记(三)数据库连接池
- 个人学习-java-jdbc 数据库连接池
- jdbc 学习总结三之数据库连接池
- JDBC学习(二)数据库连接池
- JDBC学习总结_3_数据库连接池DBCP
- jdbc和hibernate数据库连接池proxool配置
- 14-数据库连接池和jdbc优化
- 提高sas安装成功率的方法
- 自定义函数
- MD5
- stl题目列表和个人总结
- PHP微信公众号开发常用功能
- JDBC和数据库连接池学习笔记
- 1002. A+B for Polynomials
- 12.13
- motion+itchat
- Oracle 11g AMM与ASMM切换
- checked_delete问题: Beyond the C++ STL: an introduction to boostdeleter::do_it
- java.lang.OutOfMemoryError: PermGen space异常解决方案
- SpringMVC四大注解 Component·Controller·Service·Repository
- Json