JDBC概述二(JDBC编程+案例展示)

news2024/11/19 10:53:21

一(JDBC的编程步骤)

1.加载数据库驱动

加载数据库驱动通常使用class类的静态方法forName()来实现,具体实现方式如下:

Class.forName(“DriverName”),DriverName就是数据库驱动类所对应的字符串。

要加载MySQL数据库的驱动可以采用如下代码:

Class.forName("com.mysql.cj.jdbc.Driver");//MySQL8版本
Class.forName("com.mysql.jdbc.Driver");//MySQL5版本

加载Oracle数据库的驱动可以采用如下代码:

Class.forName("Oracle.jdbc.driver.OracleDriver");

从上面两种加载数据库驱动的代码可以看出,在加载驱动时所加载的并不是真正使用数据库的驱动类,而是数据库驱动类名的字符串。

2.通过DriverManage获取数据库连接。

DriverManage中提供了一个getConnection()方法来获取数据库连接,获取方式如下:

Connection con=DriverManage.getConnection(String url,String user,String pwd);

方法里面的三个参数分别表示连接数据库的url,登录数据库的用户名和密码。其中用户名和密码通常由数据库管理员设置,而连接数据库的url则遵循一定的写法。以MySQL数据库为例,其地址的书写格式如下:

url="jdbc:mysql://hostname:port/databasename";

eg:url="jdbc:mysql://localhost:3306/stu" ;

上面代码中,jdbc:mysql是固定写法,mysql指的是MySQL数据库。hostname表示主机名(如果数据库在本机上,hostname可以为localhost或者127.0.0.1,如果在其他机器上,hostname为所要连接机器的IP地址),port指的是连接数据库的端口号(MySQL端口号默认为3306)databasename指的是MySQL中相应数据库的名称。

3.通过Connection对象获取Statement对象。

Connection创建Statement的方式有以下3种:

(1):createStatement();创建基本的Statenment对象。

(2):prepareStatement(String sql);根据传递的SQL语句创建PrepareStatement对象。

(3):  prepareCall(String sql);根据传递的SQL语句创建CallableStatement对象。

以创建基本的Statement对象为例,创建方式如下:

Statement stmt=con.createStatement();

4.使用Statement执行SQL语句。

所有的Statement都有如下三种执行SQL语句的方法。

(1):execute(String sql),用于执行任意的SQL语句。

(2):executeQuery(String sql):用于执行查询。返回一个ResuleSet结果集对象。

(3.executeUpdate(String sql):主要用于执行DML(数据操作语言)和DDL(数据定义语言)语句。执行DML语句(INSERT,UPDATE,DELETE)时会返回受SQL语句影响的行数,执行DDL(CREATE,ALTER)语句返回0。

以execyteQuery()方法为例,其使用方式如下:

ResultSet rs=stmt.executeQuery(sql);

5.操作ResultSet结果集。

如果执行的SQL语句是查询语句,执行结果将会返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。

6.关闭连接,释放资源。

每次操作数据哭结束后都要关闭数据库连接,释放资源,以重复利用资源 。需要注意的是通常资源的关闭顺序与打开顺序相反,关闭资源顺序为:ResultSet,Statement(或PrepareStatement)和Connection。为了保证在异常情况下也能关闭资源。需要在try……catch的finally代码块中统一关闭资源。

二(案例展示)

从数据库中的数据表读取数据,并将结果打印在控制台。

(1):搭建数据库环境。

在MySQL数据库中创建一个名为jdbc的数据库,在该数据库下创建一个名称为tb_user的表,创建数据库和表的SQL语句如下:

create database jdbc;
use jdbc;
create table tb_user(
    id int primary key auto_increment,
    NAME varchar(40),
    sex varchar(2),
    email varchar(60),
    birthday DATE

);

上述创建tb_user表时添加了id,NAME,sex,email,birthday5个字段,NAME字段名称为大写形式,是因为NAME在MYSQL数据库中属于关键字,为方便区分,所以将NAME字段名称全部用大写表示。

数据库和表创建成功后,再向tb_user表中添加3条数据,插入的SQL语句如下:

insert into tb_user(NAME,sex,email,birthday)
values ('Jack','男','jack@126,com','2000-08-01'),
       ('Tom','男','tom@126.com','1999-01-09'),
       ('Alice','女','alice@126,com','2001-05-06');

查看数据是否添加成功,使用select语句查询tb_user表中的数据,查询结果如下:

 (2):创建项目环境,导入数据库驱动。

2.1 在项目中新建一个文件夹Directory,取名为lib,将数据库驱动文件JAR包mysql-connector-java-8.0.18复制在lib文件夹中(驱动下载地址,可进maven仓库)。

2.2 右键File-Project Structure-Libraries-+-Java-项目下lib包中的驱动包-ok-ok-ok-Apply-ok

 

 

 

 

 2.3 编写JDBC程序

package jdbc;

import java.sql.*;

public class Demo1 {
    public static void main(String[] args) throws SQLException {
        Connection con=null;
        Statement sta=null;
        ResultSet res=null;

        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.通过DriverManage获取数据库连接
            String url="jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true";
            String user="root";
            String password="123456";
            con= DriverManager.getConnection(url,user,password);
            //3.通过Connection对象来获取Statement对象
            sta= con.createStatement();
            //4.使用Statement对象来执行SQL语句
            String sql="select * from tb_user";
            res= sta.executeQuery(sql);
            //5.操作ResultSet结果集
            System.out.println("id\tname\tsex\teamil\tbirthday");
            while(res.next()){
                //通过列名获取指定字段的值
                int id=res.getInt("id");
                String name=res.getString("name");
                String sex=res.getString("sex");
                String email=res.getString("email");
                Date birthday=res.getDate("birthday");
                System.out.println(id+"\t"+name+"\t"+sex+"\t"+email+"\t"+ birthday);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.关闭连接,释放资源
            if(res!=null){res.close();}
            if(sta!=null){sta.close();}
            if(con!=null){con.close();}
        }
    }

}

该案例中,首先注册了MySQL数据库驱动,通过DriverManage获取一个Connection对象,然后使用Connection对象创建一个Statement对象,Statement对象通过executeQuery(String sql)方法执行了SQL语句,并返回结果集ResultSet,接下来遍历ResultSet得到查询结果并输出,最后关闭连接,释放数据库资源。

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

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

相关文章

RuoYi-Flowable-Plus(代码生成)

RuoYi-Flowable-Plus搭建 若依所有扩展项目的代码生成功能都是一样的&#xff0c;RuoYi-Flowable-Plus为例来演示。 模块创建 1.创建新模块ruoyi-student2.编辑RuoYi-Flowable-Plus\pom.xml <dependency><groupId>com.ruoyi</groupId><artifactId>ruoy…

搭建Java环境

使用Java语言开发首先必须搭建好开发环境。 以windows 10为例&#xff0c;进行Java环境搭建分为以下几个步骤 1、下载并安装JDK 2、配置环境变量 1、下载并安装JDK 可以访问网站http://www.oracle.com/index.html进行SDK的下载&#xff08;因网站经常改版&#xff0c;这里就…

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作&#xff0c;但有时候会遇到docx库提供的操作无法直接满足业务上的需求&#xff0c;需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务&#xff1a;以下示例需要在文档中的所有 "人生苦短…

Swing进度条演示(传输真实文件)

目录 GIF演示 代码 此示例涵盖的知识点&#xff1a;线程、IO流、File、Swing、Listener、JFrame、JFileDialog、JOptionPane、JProgressBar、Timer GIF演示 代码 package psn.exer.progress;import javax.swing.*; import java.awt.*; import java.io.*; import java.util.U…

【PyTorch】P1 简介

PyTorch 基础PyTorch 简介机器学习框架PyTorch 与 TensorFlow 的核心之争PyTorch生态PyTorch能做什么开发环境选择Pytorch Cuda 安装与疑难解答PyTorch 简介 2002年提出 torch 框架&#xff0c;是通用的机器学习计算框架&#xff0c;支持GPU加速运算&#xff1b; 2011年推出 to…

k-Tree(DP)

k-Tree1、问题2、思路&#xff08;DP&#xff09;3、代码1、问题 2、思路&#xff08;DP&#xff09; 这道题翻译过来就是说&#xff0c;给我们一个k叉树&#xff0c;然后每个点到子节点的边的边权从左到右依次为1到k。然后我们从根节点出发&#xff0c;向下走&#xff0c;我们…

@RequestParam和@PathVariable的用法与区别

PathVariable PathVariable 映射 URL 绑定的占位符带占位符的 URL 是 Spring3.0 新增的功能&#xff0c;该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义通过 PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中&#xff1a;URL 中的 {xxx} 占…

[vue] Vite的使用

[vue] Vite的使用环境package.json文件变更变更脚手架修改脚本命令index.html 文件htmlWebpackPlugin 替换为 vite-plugin-htmlWere sorry but vue3.x-vite-ts doesnt work properly without JavaScript enabled. Please enable it to continue.vite.config.ts 文件变更vite-pl…

设计模式之行为型模式

四、行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在…

[acwing周赛复盘] 第 93 场周赛20230304

[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了&#xff0c;只A…

十大经典排序算法【快速了解】

文章目录一、算法分类二、经典排序算法总览三、算法复杂度四、代码实现一、算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a; 通过比较来决定元素间的相对次序由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非…

电视剧《狂飙》太过诡异,主演各个悄无声息,龙套演员却身价倍增

说起电视剧《狂飙》&#xff0c;相信很多人都有过观看&#xff0c;这部以反腐为题材的大剧&#xff0c;尺度之大近年来绝无仅有。不过观众在被剧情震撼的同时&#xff0c;也发现了一些诡异的事情&#xff0c;比如说主角和配角的反差&#xff0c;让人感觉很不适应。 在电视剧《狂…

51单片机入门————数码管显示

我们在马路上看到的红绿灯&#xff0c;就是由数码管来实现的&#xff0c;就是其中可能加入了一些延时和转换数码管是通过控制138译码器与74HC245来控制数码管的亮灭与数字的显示电路原理图我们先讨论一个数码管数码管有共阳极和共阴极&#xff0c;我们现在使用的STC89C52是共阴…

DataX入门

目录 1. DataX介绍 2. DataX支持的常用数据源类型 3. 设计理念 4. DataX框架设计 4.1. Reader 4.2. Writer 4.3. Framework 5. DataX的运行流程 6. DataX与Sqoop对比 7. 部署 8. 配置详解 9. 案例 同步MySql到HDFS 9.1. 整体结构 9.2. mySqlReader 9.2.1. …

C语言函数:字符串函数及模拟实现strncpy()、strncat()、strncmp()

C语言函数&#xff1a;字符串函数及模拟实现strncpy()、strncat()、strncmp() 在了解strncpy、strncat()、前&#xff0c;需要先了解strcpy()、strncat()&#xff1a; C语言函数&#xff1a;字符串函数及模拟实现strlen() 、strcpy()、 strcat()_srhqwe的博客-CSDN博客 strncp…

包装类详解(装箱,拆箱)

Object 引用可以指向任意类型的对象&#xff0c;但有例外出现了&#xff0c;8 种基本数据类型不是对象&#xff0c;那岂不是刚才的泛型机制要失效了&#xff1f;&#xff08;泛型详解._阿瞒有我良计15的博客-CSDN博客&#xff09; 实际上也确实如此&#xff0c;为了解决这个问题…

数据结构与算法-二叉树-序列化与反序列化

可能性探究:我们可以想到的是只有一棵树按照某个序是唯一确定要给结构的情况才可能被序列化和反序列化&#xff0c;比如我们对于以下的二叉树可以找到它的先序、中序、后序如下&#xff1a; 根据它的先序和后序我们找不到任何其他可能的树&#xff0c;所以可以根据先序和后序去…

NLP预训练模型

Models Corpus RoBERTa: A Robustly Optimized BERT Pretraining Approach 与BERT主要区别在于&#xff1a; large mini-batches 保持总训练tokens数一致&#xff0c;使用更大的学习率、更大的batch size&#xff0c;adam β20.98\beta_20.98β2​0.98&#xff1b;dynamic ma…

aws eks 集群初始化过程中pause容器的启动逻辑

eks集群默认策略在磁盘使用量达到threshold时会清除镜像&#xff0c;其中pause镜像也可能会被清除 https://aws.amazon.com/cn/premiumsupport/knowledge-center/eks-worker-nodes-image-cache/ pause容器能够为pod创建初始的名称空间&#xff0c;pod的内的容器共享其中的网络空…

库函数qsort 的模拟实现

在之前了解了库函数qsort的使用之后 我们来模拟实现一下上篇有介绍 qsort的底层实现是快速排序 由于害怕没有人了解过快速排序 我就用大家熟知的冒泡排序进行模拟实现 先来展示完整代码 以下代码为升序排序 如果降序将冒泡排序中的大于号改为小于号就可以了#define _CRT_SECURE…