说一下使用jdbc时涉及到的一些基本的接口和类

java.sql.Driver

是数据库驱动接口,com.mysql.jdbc.Driver是mysql对应的驱动,由数据库供应商实现,用于提供驱动,实现了java.sql.Driver接口。

java.sql.DriverManager

管理驱动的类,可以使用DriverManager通过驱动来获取数据库连接。

java.sql.Connection

对数据库连接进行管理的接口,一个Connection就相当于一个通往对应数据库的通道。

对以上几个做一个详细介绍,直接看源码:

//com.mysql.jdbc.Driver 实现了 java.sql.Driver接口
public class Driver extends NonRegisteringDriver implements java.sql.Driver {//向驱动管理器注册自己static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}//构造一个 com.mysql.jdbc.Driver 用于注册public Driver() throws SQLException {// Required for Class.forName().newInstance()}
}// 驱动管理器类中,看一下如何注册驱动、获取数据库连接的
public class DriverManager {//注册驱动最终调用的方法public static synchronized void registerDriver(java.sql.Driver driver, DriverAction da) throws SQLException {//如果驱动程序还没有添加到列表 registeredDrivers 中,请注册它if(driver != null) {registeredDrivers.addIfAbsent(new DriverInfo(driver, da));} else {throw new NullPointerException();}}//获取连接最终调用的方法private static Connection getConnection( String url, java.util.Properties info, Class<?> caller) throws SQLException {//当callerCl为null时,我们应该检查应用程序(它间接调用这个类)的类加载器,//这样就可以从这里加载rt.jar外部的JDBC驱动程序类。ClassLoader callerCL = caller != null ? caller.getClassLoader() : null;synchronized(DriverManager.class) {if (callerCL == null) {callerCL = Thread.currentThread().getContextClassLoader();}}// 遍历试图建立连接的已加载的 registeredDrivers。 for(DriverInfo aDriver : registeredDrivers) {// 如果调用方没有加载驱动程序的权限,那么跳过它。if(isDriverAllowed(aDriver.driver, callerCL)) {Connection con = aDriver.driver.connect(url, info);if (con != null) { return (con);}}}  }
}

java.sql.Statement

对数据库操作的一个接口,可以发送sql、执行sql,它是先组装sql,然后发送sql查询结果,因此存在缺陷,其缺陷在于它发送的sql是将参数拼接完之后再进行编译的,所以容易发生sql注入攻击的危险,一般不用,这里不做详细介绍。
何为sql注入攻击,例如:发送的如下SQL

"SELECT * FROM USER WHERE USER_NAME = "+ USER_NAME +"AND PWD = "+PWD;
这时我这样设置:USER_NAME = user | PWD = 111 or 1=1,则SQL就会变成
SELECT * FROM USER WHERE USER_NAME = user AND PWD = 111 or 1=1
这样就直接规避掉了用户名和密码的校验。

java.sql.PreparedStatement

对数据库操作的一个接口,可以发送sql、执行sql,在获取PreparedStatement对象时,就已经将sql发送出去编译成了可执行的sql语句,也就是常说的预编译,SQL中使用占位符的方式来表示参数,占位符的地方只是参数,不能所作sql中固定的语法
例如:发送的sql="SELECT * FROM USER WHERE USER_NAME = ? AND PWD = ?";
然后再另外使用方法的方式去设置 ? 占位符处的参数,防止了sql注入的风险,通过Connection接口的connection.prepareStatement(sql)方法获取PreparedStatement,具体实现调用的是  com.mysql.jdbc.ConnectionImpl 中的方法。

java.sql.CallableStatement

和 PreparedStatement 功能大致相同,只是CallableStatement对象可以用于执行存储过程,而PreparedStatement只可以执行基本的SQL语句。

java.sql.ResultSet

用于存储查询返回的结果集,对于mysql来说,最终是通过com.mysql.jdbc.PreparedStatement中的方法获取的ResultSet对象。

java.sql.DatabaseMetaData

此对象用于获取数据库的整体综合信息,可以使用Connection对象的connection.getMetaData()方法直接获取。

java.sql.ResultSetMetaData

用于获取关于ResultSet对象中列的类型和属性信息,通过ResultSet对象的resultSet.getMetaData()方法直接获取。

java.sql.Types

这个类中定义了用于标识SQL类型的常量,称为JDBC类型。

这里总结一下:开发者使用jdbc操作数据库时,添加驱动时需要添加对应数据库厂商提供的驱动包中的Driver,而后具体操作时,直接调用 java.sql.* 包中接口的方法即可,最终底层调用的是对应数据库厂商提供的com.*.jdbc.*包中的实现类中的方法,数据库厂商提供的驱动包实现了java.sql.*包中接口的方法,这就是代码层面上的jdbc。java提供一组接口,数据库厂商实现这些接口,根据自身的特点编写不同的实现,而程序员只需使用java中的接口即可,利用了多态的方式。

25、jdbc操作数据库(2)相关推荐

  1. Java系列技术之JDBC操作数据库-钟洪发-专题视频课程

    Java系列技术之JDBC操作数据库-22人已学习 课程介绍         JDBC连接数据库是Java系列技术中数据库知识的核心技术,是学习后续课程JavaWeb入门前需要掌握的基础! 这门课的前 ...

  2. JavaWeb:用JDBC操作数据库

    JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 什么是JDBC JDBC的全称是 ...

  3. 24、jdbc操作数据库(1)

    什么是jdbc? 看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API. Jdbc有什 ...

  4. java监听数据库操作_第十六篇——JDBC操作数据库之监听器

    JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...

  5. Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构

    文章目录 Mybatis介绍 jdbc操作数据库原生写法 使用jdbc编程问题总结 Mybatis架构 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个 ...

  6. jdba访问mysql_Java中JDBC操作数据库的步骤

    Java中JDBC操作数据库的步骤,今天给喜欢Java开发或者是想要参加Java培训学习的小伙伴们分享一些Java技能干货,那就是Java阐述jdba操作数据库的步骤,废话不多说了,随小编一起来看一下 ...

  7. java完整JDBC操作数据库

    java使用JDBC操作数据库的包含以下7个主要步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...

  8. 说说JDBC 操作数据库的步骤?

    分析&回答 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操作结果集. ...

  9. 【JDBC】JDBC 简介 ( JDBC 概念 | JDBC 本质 | 使用 JDBC 操作数据库的好处 | JDBC 提供的 API 组件 )

    文章目录 一.JDBC 概念 二.JDBC 本质 三.使用 JDBC 操作数据库的好处 四.JDBC 提供的 API 组件 一.JDBC 概念 JDBC 全称 Java DataBase Connec ...

最新文章

  1. [转]VC无负担实现XP风格界面
  2. 对比es1.x和es2.0纹理加载方法
  3. CascadePSP 测试笔记
  4. 为什么说 Java 中只有值传递?
  5. sql server 判断是否存在数据库,表,列,视图
  6. php根据循环条件切换图片,根据条件循环复框,麻烦各位朋友帮小弟我看一下应该怎样改...
  7. 计算机金融专业课程方案,《计算机在金融业中的应用》教学实施方案
  8. pytorch使用说明2
  9. 情人节到了,Postman 都脱单了,那你咧?
  10. 重复在学习中的重要性
  11. 苹果cms模板_苹果cmsv10高端模板有哪些?
  12. 【问题解决】安装Oracle数据库,中途提示未找不到文件的解决办法(附带图文)
  13. 发动机连杆产品配置管理PDM解决方案
  14. 纯翻译 GMSL2-CSI2 MAX9295和MAX9296配对通用过程 编程指南
  15. 奇虎360前端面试题
  16. CTF-攻防世界web新手入门篇
  17. 致远V8.1 协同 最新版致信安装部署教程linux
  18. “含沙射影”?【空心杯微电机】映射冷行业
  19. Linux查看log日志命令总结
  20. F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)

热门文章

  1. linux内核分为子系统,Linux内核内存管理子系统分析【转】
  2. office连接oracle,Access(VBA)连接Oracle数据库的代码
  3. mysql 8 配置参数优化_mysql8 参考手册--配置非持久性优化器统计参数
  4. java分桃子_猴子分桃子.java
  5. java class类型参数_使用Class对象实例化Java类型参数/ generic
  6. c++向mysql通信_C++连接MySQL
  7. leetcode139. 单词拆分
  8. [SpringBoot2]HelloWorld
  9. javax.servlet.ServletException: 实例化Servlet类[com.wk.web.RegisterServlet]异常
  10. 常用Arthas命令