JDBC

数据库驱动
数据库驱动由数据库厂商提供,主要是在请求响应数据库接口服务时,网络数据可以封装/解析为数据库需要的格式,并提供数据库对应功能的API

数据库连接
数据库连接是创建会话并可以基于会话来执行sql,且基于TCP长连接。

数据库的底层实现:(为什么统一接口编程,就可以使用第三方提供的功能)

JDBC_第1张图片
统一的接口编程:(谈对JDBC的理解
JDBC编码的方式是统一使用JDBC API作为对象的定义,new具体数据库需要的对象。父类引用指向子类对象(多态)。
例如MySQL
Connection c = new MySQLDataSource().getConnection();
PreparedStatement ps = c.prepareedStatement(sql);
PersultSet rs = ps.resultSet();

new 出来的或方法调用生成的,都是具体数据库的对象。但是对象的定义都是JDBC的API,是统一的。

JDBC优势

  • java语言访问数据库完全面向抽象接口编程
  • 开发数据库应用不用限定在特定数据库场上的API
  • 程序的可移植性大大增强
    底层实现:SPI机制+反射,设计上使用多态。

JDBC创建连接的方式及区别

1.Connection获取的方式:

  • DriverManager
  • DataSource
    2.两种方法的区别
  • DriverManager: 每次都是创建新的物理连接,调用connection.close()是关闭物理连接,这样关闭造成的结果是:connection连接无法复用,效率较低。
  • DataSource:初始化时就创建一定数量的连接,之后都是在连接池获取connection,调用connection.close()不是关闭物理连接,只是重置connection对象,并放回连接池。这样connection连接可以复用,效果更好。

各个Statement对象及区别

Statement对象

  • 用于执行不带参数的简单SQL语句

PreparedStatement

  • 用于执行带参数或者不带参数的SQL语句
  • 执行速度快与Statement对象,预编译在数据库系统
  • 安全上比Statement更好,可以防止一定的SQL注入

PreparedStatement对象:预编译带占位符的SQL,之后只需要传入参数,就可以在编译好的sql中执行。

什么情况会导致SQL注入?为什么会导致?

  • select * from where username = ’ 字符串变量值 ’
    当字符串变量值为:
    JDBC_第2张图片
    此时select语句为:
    在这里插入图片描述
    这时user表中所有的数据都可被查询出。
    PreparedStatement防止sql注入的原理?

(1)使用占位符
(2)基于传入变量符号以转义的的形式设置到占位符(替换占位符)

PreparedStatement一定能防止所有的sql注入吗?
不能

CallableStatement

  • 用于执行数据库存储过程的调用

你可能感兴趣的:(数据库)