JDBC基础知识

导读:本篇文章讲解 JDBC基础知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1-JDBC概述

Java 中的数据存储技术

在Java中,数据库存取技术可分为如下几类:
1. JDBC直接访问数据库
2. JDO技术
3. 第三方O/R工具,如Hibernate, mybatis 等

JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这个类库可以以一种标准的方法来方便地访问数据库资源

  1. JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些
    细节问题。
  2. JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
    JDBC基础知识
    在这里插入图片描述

JDBC体系结构

JDBC接口(API)包括两个层次:

  1. 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
  2. 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

JDBC程序访问数据库步骤

在这里插入图片描述

2-获取数据库连接

1. Driver 接口

  1. java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
  2. 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
    2.1 Oracle的驱动:oracle.jdbc.driver.OracleDriver
    2.2 mySql的驱动: com.mysql.jdbc.Driver

加载与注册 JDBC 驱动

方式一:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

Class.forName(“com.mysql.jdbc.Driver”);

方式二:DriverManager 类是驱动程序管理器类,负责管理驱动程序

DriverManager.registerDriver(com.mysql.jdbc.Driver);

通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

建立连接(Connection)

  1. 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接
  2. User,password可以用“属性名=属性值”方式告诉数据库;
  3. JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
  4. JDBC URL的标准由三部分组成,各部分间用冒号分隔。
    4.1 jdbc:子协议:子名称
    4.2 协议:JDBC URL中的协议总是jdbc
    4.3 子协议:子协议用于标识一个数据库驱动程序
    4.4 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名。
    在这里插入图片描述

3-使用Statement操作数据表的弊端

访问数据库

  1. 数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句。

在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:
在这里插入图片描述
SQL 注入攻击
2. SQL 注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的 SQL 语句段或命令(如:SELECT user, password FROM user_table WHERE user=‘a’ OR 1 = ’ AND password = ’ OR ‘1’ = ‘1’) ,从而利用系统的 SQL 引擎完成恶意行为的做法
3. 对于 Java 而言,要防范 SQL 注入,只要用PreparedStatement(从Statement扩展而来) 取代 Statement 就可以了。

4-使用PreparedStatement

  1. 可以通过调用 Connection 对象的 preparedStatement() 方法获取PreparedStatement 对象。
  2. PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的SQL 语句。
  3. PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数. setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开 始),第二个是设置的 SQL 语句中的参数的值。
    在这里插入图片描述
    在这里插入图片描述

释放资源

  1. 释放ResultSet, Statement,Connection。
  2. 数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放

ResultSet

  1. 通过调用 PreparedStatement 对象的 excuteQuery() 方法创建该对象
  2. ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现
  3. ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet 对象的 next() 方法移动到下一行
  4. ResultSet 接口的常用方法:
    boolean next()
	getString()
     …

关于ResultSet的说明

  1. 查询需要调用Prepared Statement 的 executeQuery() 方法,查询结果是一个 ResultSet对象。
  2. 关于 ResultSet:代表结果集
    2.1 ResultSet: 结果集. 封装了使用 JDBC 进行查询的结果。
    2.2 调用 PreparedStatement 对象的 executeQuery() 可以得到结果集.
    2.3 ResultSet 返回的实际上就是一张数据表. 有一个指针指向数据表的第一条记录的前面。

3.可以调用 next() 方法检测下一行是否有效. 若有效该方法返回 true, 且指针下移. 相当于Iterator 对象的 hasNext() 和 next() 方法的结合体。
4.当指针指向一行时, 可以通过调用 getXxx(int index) 或 getXxx(int columnName) 获取每一列的值。

例如: getInt(1), getString("name")

5.ResultSet 当然也需要进行关闭。

ResultSetMetaData 类

在这里插入图片描述

使用PreparedStatement实现批量插入

批量处理JDBC语句提高处理速度

在这里插入图片描述
在这里插入图片描述
jdbc连接mysql实例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63303.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!