入门JAVA第十七天 Oracle的JDBC技术

news2025/7/18 15:14:28

一、数据库JDBC技术学习内容与方法

1.1 学习内容

(1) Oracle数据库

        目前最好的关系型数据库。

        基本的CRUD命令

        SQL语句。select(R),update(U),delete(D),insert(C)

(2) MySQL数据库

        中小型项目非常好用的关系型数据库。

        灵活,小巧。

(3)扩展软件开发流程中数据库设计原则

        ER图---》根据需求分析数据库结构。

        三范式---》学会使用范式来规范表结构

(4) JDBC

         在Java中连接数据库技术。

        在Java代码中想操作数据库中的数据,就必须使用到JDBC技术。

        提供JDBC从Java代码中想数据库发送执行的SQL语句

        工具类的封装。DAO-Service 的分层。

        一定要遵守编码规范

1.2 学习难点 

就是一套使用的规范。大家按规范编写就没有什么特别难理解的部分。

难点:

(1) 分层,理解DAO与Service层的区别。

(2) 封装工具类。连接对象需要单独封装起来。

       a 要使用连接池技术

       b ThreadLocal类。理解上需要大家想。

(3) 事务处理,异常处理,连接关闭。这三个内容大家必须清楚在哪处理。

1.3 学习方法

a 按规范比那些代码。

b 练习

二、JDBC是什么

JDBCJava DataBase Connector  中文:Java数据库连接技术

JDBC 是一种结束。一种在Java程序中连接数据库的技术。

使用JDBC可以实现在Java代码中去操作数据库表中的记录。

JDBC是一个持久化技术

三、持久化

化:过程。

数据是分为零食状态和持久状态。

        临时状态:数据保存在内存中。代码在运行时的数据。

        持久状态:数据保存在硬盘中,以文件的方式长期保存的数据。

持久化:数据在临时状态 与 持久状态 之间进行切换的过程。

        1 将Java程序中的数据保存到数据库中。

        2 将数据库职工的数据读取到Java程序中

四、JDBC是一套规范也是标准

JDBC是只一套规范,约定了Java语言连接到不同数据库产品时的标准

例如:USB接口。

任何数据库产品,想让自己的产品,可以使用JDBC连接到Java程序,就要按JDBC的标准编写数据库的驱动

数据库的驱动是数据库厂商按JDBC标准,由各数据库厂商自己编写的。

在Java程序中接口表示了一种能力,一种规范,一个标准,一种约定。

JDBC本身就是一组接口。各大数据库厂商需要根据自己的数据库去实现这一组接口。

五、JABC中的桑核心接口

5.1 Connection 接口

Connection是连接对象,负责创建Java程序与数据库之间的连接。

Connection接口的实现类由各数据库厂商提供。称为驱动类。操作数据库之前必先获得驱动类。

5.2 Statement 接口 

常用的子接口PreparedStatement接口。

PreparedStatement是操作对象。负责通过Connection的连接,向数据库执行SQL语句。

5.3 ResultSet接口

ResultSet是结果集接口,当我们使用PreparedStatement向数据库执行Select命令时,Java程序需要能接收查询结果

在Java程序端就是使用ResultSet对象来接收查询结果的。

数据库的查询结果就是一个二维表格。

ResultSet也是一个表格的处理方式。

六、使用JDBC操作数据库的基本步骤

使用JDBC操作数据库的步骤就三步

        1 打开连接

                将Java程序与数据库创建连接。

        2 操作数据库

                通过Java程序向数据库发送SQL语句执行。

                分增删改,和 查询。

                查询有返回值,返回值叫结果集。

        3 关闭连接

                释放资源,一定要执行的部分。finally块。

6.1 打开连接

打开连接,先获取连接数据库的驱动类

        驱动类是数据库厂商提供,是个Jar包。

还要再确定四个参数:

        1 驱动类的名称

        2 连接数据库的字符串

        3 数据库账号

        4 密码 

//四大参数
String driverClassName="oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userName = "no5";
String userPass = "123456";
//获得连接对象
Connection conn = DriverManager.getConnection(url,userName,userPass);

6.2 操作数据库

(1) 增删改查 

//通过PreparedStatement对象来操作数据库
String sql = "insert into users_no5(user_id,user_name) values( SEQ01.nextval , '都醒着')";
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.executeUpdate();//执行增删改语句的方法

(2) 查询

rs对象就是一个指向二维表格的引用。rs对象每次只能指向一行。通过next()向下移动一行。

通过getXXX()方法获取指定列的值。

//通过PreparedStatement对象来操作数据库
String sql = "select * from users_no5";
PreparedStatement pstat = conn.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();//rs就是一个二维表格。
while(rs.next()){//向下移一行。
    System.out.println(rs.getInt("user_id"));
    System.out.println(rs.getString("user_name"));
    System.out.println("----------");
}

6.3 关闭数据库连接对象

//关闭连接
conn.close();

七、预编译的操作接口PreparedStatement

使用PreparedStatement可以提前将要执行的SQL语句进行数据库端的预编译

使用PreparedStatement可以提高执行效率。并安全。

7.1 在哪里提前写SQL语句 

在创建pstat对象时,就以及提前将SQL写好了。

String sql = "insert into users_no5(user_id,user_name) values(seq01.nextval,'XXX')" ;
PreparedStatement pstat = conn.prepareStatement(sql);

7.2 可以使用SQL语句中定义变量

String sql = "insert into users_no5(user_id,user_name) values(seq01.nextval,?)" ;
PreparedStatement pstat = conn.prepareStatement(sql);

7.3 可以使用setXXX()方法为?赋值

一定是在SQL语句执行之前,先为所有的?号进行赋值。

public abstract void setString(int parameterIndex,String x)

        参数:parameterIndex 表示?的索引。从1开始。

                  x  表示值。

String sql = "insert into users_no5(user_id,user_name) values(seq01.nextval,?)" ;
PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setString(1,"???");
int i = pstat.executeUpdate();

经典面试题:Statement与PreparedStatement之间的区别?

1 PreparedStatement因为是预编译的原因,可以使用占位符?,这样在之后可以调用set方法来灵活改变SQL语句的内容。

2 PreparedStatement的在执行一次是的开销要大于Statement,但是面对一次性操作也不会带来更多的好处。

3 在大量对象的情况下,由于PreparedStatement是预编译,所以在执行时效率更高。

八、结果集对象 - ResultSet接口 

ResultSet对象是用来接收查询结果的对象。

数据库的查询结果就是一个二维表格

rs对象就是一个指向查询结果每一行的一个指针。

8.1 如何获得RS对象

通过pstat对象执行 executeQuery()方法获得一个RS对象。

String sql = "select * from users_no5 order by user_id ";
PreparedStatement pstat = conn.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();

8.2 EOF和BOF

BOF表示第一行的上面。

EOF表示最后一行的下面。

rs对象就是一个指向查询结果每一行的一个指针。

查询结果能不能没有记录?可以。

所以rs对象默认指向BOF。只有调用一次next()方法才能指向第一行。

如果rs对象调用next()方法,指向了EOF,就表示当前查询结果已经没有了。next()方法返回false;

8.3 next()方法 

boolean next() throws SQLException;

        向一移动一行。当指向EOF时返回false。

ResultSet rs = pstat.executeQuery();
while(rs.next()){
    int userId = rs.getInt("user_id");
    String name = rs.getString("user_name");
    System.out.println(userId+":"+name);
    System.out.println("----------");
}

8.4 getString()方法

String getString(String columnLabel) throws SQLException;

int getInt(String columnLabel) throws SQLException;

 九、封装JDBC的操作

9.1 封装原则

封装原则:将变化的    不变化的 分开进行封装。

以实现,在需求改时,对变化的部分进行修改时,不会影响到不变化 的部分。

9.2 数据库操作步骤的封装 

数据库的操作步骤:3步。

1 打开连接

2 操作数据库

3 关闭连接

变化 :2 操作数据库 (DAO 数据访问对象)

这部分内容是根据操作的不同,代码不一致。

针对不同的表。针对同一张表的不同的CRUD。

不变化 :1 打开连接    3 关闭连接  (工具类)

不管对数据库进行什么操作, 都必须先打开连接,最后关闭连接。

十、封装连接对象的工具类(第一版) 

在这个工具类中,要封装二个行为。

        1 打开连接

        3 关闭连接

/**
 * 在这个工具类中,要封装二个行为。
 * 1 打开连接   getConn()
 * 3 关闭连接   closeConn()
 */
public class ConnUtils {
    private static Connection conn;
    private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:XE";//SID数据库实例名
    private static final String USER_NAME = "no5";
    private static final String USER_PASS = "123456";
    private static final String CLASS_NAME = "oracle.jdbc.driver.OracleDriver";

    /**
     * 打开连接
     *
     * @return 连接对象
     */
    public static Connection getConn() throws SQLException {
        if (conn == null || conn.isClosed()) {
            conn = DriverManager.getConnection(URL, USER_NAME, USER_PASS);
        }
        return conn;
    }

    /**
     * 关闭连接
     */
    public static void closeConn() throws SQLException {
        try {
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        } finally {
            conn = null;
        }
    }
}

十一、编写实体类,映射数据库表

数据库表:users_no5

表示的是用户信息。

表中的每一第记录就是一个用户实体

表结构:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【零基础入门前端系列】—浮动(十八)

【零基础入门前端系列】—浮动(十八) 一、浮动的定义 float属性定义元素在哪个方向,以往这个属性总应用于图像,使得文本围绕在图像的周围,不过在CSS中,任何元素都可以浮动,浮动的元素会生成一…

【Git】P5 Git 远程仓库(3)pull 发生冲突

pull 发生冲突冲突在什么场景下发生?为什么要先 pull 再 push构建一个冲突场景初始开始操作:程序员2:程序员1:程序员2:发生冲突:查看冲突:解决冲突:冲突在什么场景下发生&#xff1f…

[手写OS]动手实现一个OS 之 准备工作以及引导扇区

[手写OS]动手实现一个OS之第一步-环境以及引导扇区 环境准备 一台可用计算机(linux我不知道,我用的Windows)汇编编译器NASM一个方便的软盘读写工具VirtualBox 汇编编译器NASM 官网地址:https://www.nasm.us/pub/nasm/snapshot…

java 中的equals()示例代码

Java中的equals()是十分重要的,和要区别开来简述public booleanequals(Object obj)作用:判断其他的对象是否和该对象相等其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.简单示例equals()方…

代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

打卡第22天,平衡二叉树,难,难,难。 今日任务 235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点 235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百…

BeanFactory接口

目录 概述 接口方法 BeanFactory重要的子类 概述 BeanFactory是容器的顶层接口,也是spring最核心的容器,管理bean的核心方法都在BeanFactory接口中定义。像ApplicationContext接口,ConfigurableApplicationContext接口都间接继承BeanFactory接口,既ApplicationContext调用ge…

Wwise集成到unreal

1、Wwise集成到Unreal 1.1 安装必要的软件 安装unreal 5.1;安装Audiokinetic Launcher;集成版本是Wwise 2021.1.12.7973。Audiokinetic Launcher下载地址: https://www.audiokinetic.com/zh/thank-you/launcher/windows/?refdownload&pl…

Go语言学习的第三天--下部分(Gin框架的基础了解)

每天都会分享Go的知识,喜欢的朋友关注一下。每天的学习分成两部分基础(必要的,基础不牢地动山摇),另一部分是Go的一些框架知识(会不定时发布,因为小Wei也是一名搬砖人)。但是可以保证…

哪个牌子的蓝牙耳机最好?质量最好的蓝牙耳机排行榜

随着蓝牙耳机的发展越来越快速,蓝牙耳机市场涌现出五花八门的产品,外观不同、性能不一。最近看到很多人问,哪个牌子的蓝牙耳机最好?接下来,我来给大家推荐几款质量最好的蓝牙耳机排行榜,一起来看看吧。 一…

电商使用CRM系统有什么好处,如何选择

数据显示,使用电商CRM客户管理系统后,企业销售额提高了87%,客户满意度提高了74%,业务效率提高了73%。要在竞争激烈的电商市场取得成功,与目标受众的有效沟通是有效的方法。下面说说什么是电商CRM系统?电商C…

如何使用ArcGIS生成剖面图(附练习数据)

1、概述地形剖面图指沿地表某一直线方向上的垂直剖面图,以显示剖面线上断面地势起伏状况。能够制作剖面图的软件有很多,作为GIS行业的老大,ArcGIS当然也是可以的,这里给大家详细介绍一下ArcGIS中制作剖面图的知识,希望…

2.详解DEBUG模式

文章目录DEBUG模式解决了两个问题四种开启DEBUG的方式第一种第二种第三种第四种DEBUG的PIN码可以在浏览器端调试代码使用(不推荐使用,了解就可以)DEBUG模式解决了两个问题 flask代码中如果出现了异常,我们在浏览器中不会提示具体…

图床搭建,使用typora上传

1. 准备gitee作为图床的仓库 新建仓库 准备仓库的私人令牌,后面配合使用 点击个人设置——》私人令牌 注意私人令牌,复制保存好,后面不能再看了 2. 准备PicGO,并进行相关配置 PicGo官方下载链接 下载安装好node.js,下载网址 安…

【银行测试】必看的四类题型:这可是最经典的一套题目了

目录:导读 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 四、测试案例设计题 金三银四面试面对大厂面试官提问,如何回答:花3天背完这100道软件测试面试题!银行测试的offer还不是手…

【GO】K8s 管理系统项目34[Linux环境–应用部署]

K8s 管理系统项目[Linux环境–应用部署] 1. 启动数据库 1.1 配置yum仓库 rm -f /etc/yum.repos.d/*.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/…

Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能

前言 其实想要实现功能很简单,就是在一张图片上监听鼠标滑轮滚动的事件,然后根据上滚还是下滚实现图片的缩放。 效果: 注:该配图使用《漫画|有趣的了解一下赋值、深浅拷贝》文章图片,不存在侵权问题。 实现思路 在…

规划数据指标体系方法(下)——新海盗模型

前面已经跟大家分享了规划数据指标体系的两种方法—— OSM 和 UJM 模型,分别从目标-策略以及用户旅途的角度阐述了规划数据指标体系的过程。今天我来跟大家分享最后一种规划数据指标体系的方法——新海盗模型。 了解新海盗模型 海盗模型,即 AARRR 模型&…

脑机接口科普0014——大脑

本文禁止转载!!!! 在提到脑机接口的时候,不得不提到大脑。 在我们的思维意识中,植物是没有大脑的。这是正确的。 在我们的思维意识中,动物都是有大脑的。 但是很明显,动物都有大…

程序员看过都说好的资源网站,你值得拥有。

程序员必备的相关资源网站一.技术社区1.GitHub2.Gitee(码云)3.稀土掘金4.OSCHINA开源中国5.CSDN6.博客园7.SegmentFault(思否)8.Stack Overflow9.Golang中文社区10.ChinaUnix11.51CTO12.Ruby China二.技术教程1.Devdocs2.码农教程…

案例解读| 从集中告警平台发展趋势看城商行如何落地数字化转型(二)

上期我们以具体案例入手,分享了集中告警平台到底应该与集中监控平台解耦还是紧绑定等问题。这一期依旧从具体案例切入,跟大家一起探索下告警与服务台的对接过程,以及这个过程中可能产生的问题。上期内容,一键回顾不迷路→案例解读…