JDBC

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数据库实例

JDBC_第1张图片

查询数据

JDBC_第2张图片

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注入,否则依然防止不了

JDBC_第3张图片

这种没有使用?的依然会成功执行

总结

1、prepareStatement可以提高执行效率,之所以会提高工作效率,是因为有预编译的功能,

2、如果使用prepareStatement可以防止sql注入,但是必须使用?赋值的方式才可以

你可能感兴趣的:(JDBC)