Statement,PrepareStatement,DataSource,DriverManager

一.sql注入的原理

        使用preparedStatement解决Statement的sql注入问题的原理

PreparedStatement pst = conn.preparedStatement(sql); 被称为预编译sql语句,是指在使用Connection对象创建数据库连接对象时,直接将不完整的sql语句(缺少查询条件的sql语句)直接进行编译,后期在从键盘输入时,输入的数据不会被编译,输入会制备被当作字符串,就算从键盘输入的数据存在 AND OR 等关系,虚拟机也不会再此对其进行编译

Statement st = conn.Statement(); st.execute(sql); 会先创建数据库连接对象st,st会将不完整的sql语句和从键盘输入的数据一起编译,输入的文本中的逻辑关系AND OR等关系也会参与编译,就会导致sql注入的问题。

二.PreparedStatement的优点

        1.解决sql注入问题

        2.可以才做图片视频等Blob流数据

        3.可以实现更高效的批量操作

                statement在执行sql语句时,会将插入的数据和sql一起编译,当数据量有10000000条时,sql会被编译执行10000000次,费时且占资源

                PreparedStatement在插如10000000条数据时,sql语句只会预编译一次,而后的每一条数据的插入都不会在编译sql语句,省时间省资源。

二,数据库中获取数据库连接对象得两种方式:

1,DataSoure.getConnectio();

2,DriverManager.getConnection();

联系:

这两种方法都会获取数据库得连接。

区别:

DataSource方式有数据库连接池得支持,数据库连接池在初始化时,会创建一定数量得连接对象,保存在连接池中,使用Datasource获取连接对象,是在连接池中获取,而不是创建,在类加载时创建了对象,节约了后面线程在访问数据得时间。

每次在调用connection.close()方法时,不会关闭掉物理连接,而是将connection对象回收道数据连接池,以备其他线程使用。

DriverManager方式获取数据库连接,每次访问数据库都需要创建连接,因为使用DriverManager方式在释放资源时,会切断物理连接,直接销毁连接对象,所以每次都需要创建连接,而创建连接是一个非常耗时得工作,所以开发中,主要使用得还是DataSource方式。

        


评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值