百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一文帮你搞定Java数据库基础JDBC,网友:太实用了,已学完

wxin55 2024-11-20 22:41 7 浏览 0 评论

今日分享开始啦,请大家多多指教~

一、JDBC概述

(1)JDBC API

是一组由Java语言编写的类和接口,包含在java.sql和javax.sql两个包中。

java.sql为核心包,这个包包含于J2SE中,javax.sql包扩展了JDBC API的功能,成为了J2EE的一个基本组成部分。

可分为两个层次:

  • 面向底层的JDBC Driver API,主要是针对数据库厂商开发数据库底层驱动程序使用
  • 面向程序员的JDBC API

(2)JDBC API的体系结构

(3)JDBC API的任务

面向程序员的JDBC API可以完成以下主要任务

  • 首先建立和数据源的连接
  • 然后向其传送查询和修改等SQL命令
  • 最后处理数据源返回的SQL执行的结果

(4)JDBC API中的重要接口和类

(5)JDBC程序开发步骤

  • 设置环境,引入相应的JDBC类
  • 选择合适的JDBC驱动程序并加载
  • 分配一个Connection对象
  • 分配一个Statement对象
  • 用该Statement对象进行查询等操作
  • 从返回的ResultSet对象中获取相应的数据
  • 关闭Connection

二、设置环境

  • 安装 Java 和 JDBC API(安装JDK的同时就自动安装了)
  • 安装数据库驱动程序(安装JDK的同时就自动安装了安装JDBC-ODBC桥驱动程序)
  • 安装 DBMS
  • 建立一个数据库,并注册数据源

三、建立连接

接下来要建立和DBMS的连接。包括两个步骤:

装载驱动器,用Class.forName方法显式装载驱动程序,建立与数据库的连接,调用DriverManager.getConnection()方法。

装载驱动器

用Class.forName方法显式装载驱动程序,如:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

以完整的Java类名字符串为参数,装载此类,并返回一个Class对象描述此类。

执行上述代码时将自动创建一个驱动器类的实例,并自动调用驱动器管理器DriverManager类中的RegisterDriver方法来注册它。

这里“sun.jdbc.odbc.JdbcOdbcDriver”是驱动器类的名字,可以从驱动程序的说明文档中得到。

需要注意的是,如果驱动器类有可能不存在,使用此方法就可能会抛出ClassNotFoundException异常,因此需要捕获这个异常:

建立连接

建立与数据库的连接,调用DriverManager.getConnection()方法。例如,要连接Access数据库PIMS,语句如下:

Connection con = DriverManager.getConnection("jdbc:odbc:PIMS", "test","1234");

将返回与指定数据库建立的连接

该方法有三个字符串参数:

1.第一个是JDBC URL,格式为 jdbc:子协议:子名称

  • Jdbc表示协议,JDBC URL 中的协议总是 jdbc;
  • 子协议是驱动器名称;
  • 子名称是数据库的名称,如果是位于远程服务器上的数据库,则还应该包括网络地址,//主机名:端口/数据库名。

2.第二个是访问数据库所需的用户名;

3.第三个是用户密码;

Connection是一个接口,表示与指定数据库的连接。

DriverManager类位于JDBC的管理层,作用于用户和驱动程序之间。它负责跟踪在一个系统中所有可用的JDBC驱动程序,并在数据库和相应驱动程序之间建立连接。

四、对数据库进行操作

建立好到数据库的连接后,就可以进行对数据库的操作了,一般包括如下三个步骤:

  • 使用Connection对象创建Statement对象
  • 使用Statement对象执行SQL命令
  • 从上一步骤返回的ResultSet对象中提取执行结果

(1)创建Statement对象

Connection接口有3个方法可用来创建向数据库发送SQL语句的对象:

createStatement:

创建向数据库发送SQL语句的Statement对象,用于简单的SQL语句。

Statement stmt = con.createStatement();

prepareStatement:

创建向数据库发送SQL语句的PreparedStatement对象,用于带有一个或多个参数的SQL语句。在SQL语句执行前,这些参数将被赋值

prepareCall:

创建向数据库发送SQL语句的CallableStatement对象,用于调用数据库中的存储过程

(2)使用Statement对象执行语句

Statement 接口提供了三种执行 SQL 语句的方法,使用哪一个方法由 SQL 语句所产生的内容决定:

executeQuery

用于产生单个结果集的语句,例如 SELECT 语句。

ResultSet rs = stmt.executeQuery("Select * From Person");

executeUpdate

用于执行 INSERT、UPDATE 或 DELETE 语句,以及 CREATE TABLE。

stmt.executeUpdate("DELETE FROM Person WHERE Name='李四'");

返回值是一个整数,表示受影响的行数(即更新计数),比如修改了多少行、删除了多少行等。对于 CREATE TABLE 等语句,因不涉及到行的操作,所以executeUpdate的返回值总为零。

Execute

用于执行返回多个结果集(ResultSet 对象)、多个更新计数或二者组合的语句。例如执行某个已存储过程或动态执行SQL,这时有可能出现多个结果的情况。

(3)提取执行结果

查询结果作为结果集(ResultSet)对象返回后,我们可以从ResultSet对象中提取结果

使用next方法

  • ResultSet对象中含有检索出来的行,其中有一个指示器,指向当前可操作的行,初始状态下指示器是指向第一行之前。
  • 方法next的功能是将指示器下移一行,所以第一次调用next方法时便将指示器指向第一行,以后每一次对next的成功调用都会将指示器移向下一行。

使用getXXX方法

  • 使用相应类型的getXXX方法可以从当前行指定列中提取不同类型的数据。例如,提取VARCHAR类型数据时就要用getString方法,而提取FLOAT类型数据的方法是getFloat。

允许使用列名或列序号作为getXXX方法的参数

String s = rs.getString("Name");

提取当前行Name列中的数据,并把其从SQL的VARCHAR类型转换成Java的String类型,然后赋值给对象s。

String s = rs.getString(2);//提取当前行的第2列数据

这里的列序号指的是结果集中的列序号,而不是原表中的列序号。

五、应用举例

通过JDBC访问PIMS数据库,进行查询、添加操作 :

执行结果为

1 张三

2 李四

3 王五

4 韩六

添加数据后的信息为:

1 张三

2 李四

3 王五

4 韩六

9 林时

删除数据后的信息为:

1 张三

2 李四

3 王五

4 韩六

今日份分享已结束,请大家多多包涵和指点!

如何获取?

转发分享此文,后台私信小编:“1”即可获取。(注:转发分享,感谢大家)

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: