java data Base Connectivity java数据连接一种用于执行sql语句的java API
JDBC驱动程序的分类
1、jdbc-odbc的桥连 出现早一些
2、本地协议纯java驱动程序
3、网络协议java驱动程序
4、本地api
jdbc在java语言层面的实现了统一,但是不同数据库仍旧存在许多差异。为了更好的实现跨数据库操作,于是诞生了Hibernate项目,hibernate是对jdbc的再封装,实现了对数据库的操作的更宽泛的统一和更好的可移植性
java操作mysql数据库实例
查询数据
statement和prepareStatement的区别
statement和prepareStatement都可以把sql语句从java程序中发送到指定的数据库中,并执行sql语句,但是他们也存在区别:
1、直接使用statement,驱动程序一般不会对sql语句做处理,而直接交给数据库在数据库中进行解释和编译成二进制,使用prepareStatement,形成编译的过程会对语句做字符集的转换成二进制,数据库拿到以后就会直接执行,不用再进行编译
使用prepareStatement有两个好处:
a、对于多次重复执行的语句,使用prepareStatement效率会更高一点
b、解决系统的本地化问题
2、prepareStatement还能有效的防止危险字符的注入,也就是sql注入的问题
演示sql注入漏洞
create table users(username varchar(30),
passwd varchar(30));
insert into users values('aa','aa');
SELECT * from users WHERE username='zhaksja' or 1='1'
只要1=‘1’这样的无论用户输入什么都能进入了系统,这就是sql注入漏洞
模拟sql注入漏洞
解决方法:使用preparedStatement
前提必须是使用?才能防止sql注入,否则依然防止不了
这种没有使用?的依然会成功执行
总结
1、prepareStatement可以提高执行效率,之所以会提高工作效率,是因为有预编译的功能,
2、如果使用prepareStatement可以防止sql注入,但是必须使用?赋值的方式才可以