1.简介
定义:JDBC是使用Java语言操作关系型数据库的一套API,同一套Java代码可以操作不同的关系数据库。
上图的驱动即:对于JDBC的实现类。
JDBC本质:官方(sun公司)定义的一套错做所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行代码的是驱动jar包中的实现类。
JDBC的好处:各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发。可随时替换底层数据库,访问数据库的Java代码基本不变。
2.JDBC API详解
(1)DriveManager
DriveManager(注册驱动类)的作用:
1.注册驱动 2.获取数据库连接
DriveManager是个工具类,里面都是静态方法(static),之后直接类名.方法名即可以调用
//1.注册驱动
//Java5之后,下面这行可以注释掉,因为在5jar包里的META—INF的services文件里有个java.sql.Driver,程序run之后会自动加载
Class.forName("com.mysql.jdbc.Driver");//加载驱动类 jar5的固定格式
//2.获取连接
//127.0.0.1 -- 本机IP地址 3306:端口号
//如果连接的是本机的MySQL,且端口号默认为3306,则IP地址和端口号可以省略
//配置useSSL=false参数,禁用安全连接方式,解决警告提示
String url = "jdbc:mysql://127.0.0.1:3306/test111?useSSL=false&serverTimezone=Asia/Shanghai";
(2)Connection
Connection(数据库连接对象作用):
Connnection接口用于与特定数据库连接(会话),执行SQL语句并在连接的上下文中返回结果。
1.获取执行sql的对象 2.管理事务
(3) Statement
DDL:对数据库和表的增删改查操作。DDL语句执行成功后,也可能返回0(如删除数据库)
DML:对数据的增删改操作
DQL:对数据的查询操作
(4) ResultSet
(5)PrepareStatement
继承自Statement。
sql注入:
能实现SQL注入的本质是因为拼字符串,可以把密码截断改变sql语句本意
//接收用户输入的name和password
String name = "hadjlw";
//sql注入核心在于用户密码,打印出sql语句是
//select * from login where username = 'hadjlw' and password = ''or'1'='1'
//密码变成空字符串或者判断1=1
String pwd = "'or'1'='1 "; //pwd = " ' or '1'='1';
PrepareStatement的预编译SQL语句并执行的步骤:
原理:
预编译sql(检查sql语法及编译sql)只一次(即sql语句只传入一次),执行 sql可多次