JDBC程序具体实现步骤演示

2023-11-17

再熟悉JDBC的编程步骤后,接下来通过一个案例并依照上一小节所讲解的步骤来演示JDBC的使用。此案例会从tb_user表中读取数据,并将结果打印在控制台。

需要说明的是,Java中的JDBC是用来连接数据库从而执行相关数据相关操作的,因此在使用JDBC时,一定要确保安装有数据库。常用的关系型数据库有MySQL和Oracle,本书就以连接MySQL数据库为例,使用JDBC执行相关操作。

案例的具体实现步骤如下:

(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和birthday共5个字段,其中NAME字段名称为大写形式,这是因为name字段在MySQL数据库中属于关键字,所以为了方便区分,这里将name字段名称全部用大写表示。
数据库和表创建成功后,再向tb_user表中插入3条数据,插入的SQL语句如下所示:

INSERT INTO tb_user(NAME,sex,email,birthday) 
VALUES ('Jack','男','jack@126.com','1980-01-04'),
('Tom','男','tom@126.com','1981-02-14'),
('Lucy','女','lucy@126.com','1979-12-28');

为了查看数据是否添加成功,使用SELECT语句查询tb_user表中的数据,执行结果如图所示。
在这里插入图片描述
注意:

数据库和表创建成功后,如果使用的是命令行窗口向tb_user表中插入带有中文的数据,命令行窗口可能会报错,同时从MySQL数据库查询带有中文数据还可能会显示乱码,这是因为MySQL数据库默认使用的是UTF-8编码格式,而命令行窗口默认使用的是GBK编码格式,所以执行带有中文数据的插入语句会出现解析错误。为了在命令行窗口也能正常向MySQL数据库插入中文数据,以及查询中文数据,可以在执行插入语句和查询语句前,先在命令行窗口执行以下两条命令:

set character_set_client=gbk;
set character_set_results=gbk;

执行完上述两条命令后,再次在命令行窗口执行插入和查询操作就不再出现乱码问题了。

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

在Eclipse中新建一个名称为chapter09的Java项目,使用鼠标右键单击项目名称,然后选择【New】→【Folder】,在弹出窗口中将该文件夹命名为lib并单击【Finish】按钮,此时项目根目录中就会出现一个名称为lib的文件夹。将下载好的MySQL数据库驱动文件Jar包(mysql-connector-java-5.1.46-bin.jar)复制到项目的lib目录中,并使用鼠标右击该JAR包,在弹出框中选择【Build Path】→【Add to Build Path】,此时Eclipse会将该JAR包发布到类路径下。加入驱动后的项目结构如图所示。
在这里插入图片描述
其中,MySQL驱动文件可以在其官网地址:http://dev.mysql.com/downloads/connector/j/页面中下载,单击页面Platform Independent (Architecture Independent), ZIP Archive后的“Download”按钮,并在新打开的窗口中的单击 “No thanks, just start my download”超链接后即可下载驱动压缩包(本书编写时的最新驱动版本文件是mysql-connector-java-5.1.46.zip),解压后即可得到相应JAR包。

(1) 编写JDBC程序

在项目chapter09的src目录下,新建一个名称为com.itheima.jdbc的包,并在该包中创建类Example01。在该类读取数据库中的tb_user表,并将结果输出到控制台,如文件1所示。

文件1 Example01.java

 import java.sql.*;
     public class Example01 {
         public static void main(String[] args) throws SQLException  {
             Connection conn =null;
             Statement stmt =null;
             ResultSet rs =null;
             try {
                 // 1. 加载数据库驱动
                 Class.forName("com.mysql.jdbc.Driver");
                 // 2.通过DriverManager获取数据库连接
                 String url = "jdbc:mysql://localhost:3306/jdbc";
                 String username = "root";
                 String password = "root";
                 conn = DriverManager.getConnection(url,username, password);
                 // 3.通过Connection对象获取Statement对象
                 stmt = conn.createStatement();
                 // 4.使用Statement执行SQL语句
                 String sql = "select * from tb_user";
                 rs = stmt.executeQuery(sql);
                 // 5. 操作ResultSet结果集
                 System.out.println("id    |    name      |    sex  "
                                     + "   |    email        |    birthday ");
                 while (rs.next()) {
                     int id = rs.getInt("id");    // 通过列名获取指定字段的值
                     String name = rs.getString("name");
                     String sex = rs.getString("sex");
                     String email = rs.getString("email");
                     Date birthday = rs.getDate("birthday");
                     System.out.println(id + "    |    " + name + "    |    "
                                + sex + "    |    " + email + "    |    " + birthday);
                 }
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
                 // 6.关闭连接,释放资源
                 if(rs !=null){ rs.close(); }
                 if(stmt !=null){ stmt.close(); }
                 if(conn !=null){ conn.close(); }
             }
         }
     }

运行结果如图所示。
在这里插入图片描述
图3 运行结果

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

从图中可以看到,tb_user表中的数据已被打印在了控制台。至此第一个JDBC程序实现成功。

注意:

在进行数据库连接时,连接MySQL数据库的username和password都要与创建MySQL数据库时设置的登录账户一致,否则登录失败。本章以及后续案例都默认MySQL数据库登录的username和password都为“root”。

Java基础入门:

java零基础自学首Java入门教程(含Java项目和Java真题)

Javaweb核心基础

JavaWeb基础教程,Java web从入门到企业实战完整版

JDBC视频全套视频教程

快速入门jdbc原理+jdbc实战,一套掌握

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC程序具体实现步骤演示 的相关文章

随机推荐

  • js textarea焦点事件,CodeMirror焦点事件

    1 效果图 2 功能说明 当我把光标放在 指标对象 的控件框的时候 双击 字段名称 则字段数据写入指标对象控件框 当我把光标放在 指标维度 的控件框的时候 双击 字段名称 则字段数据写入指标维度控件框 当我把光标放在 指标sql 的控件框的
  • ElementUI表格错位问题

    最近一个项目需要用到表格 为了图省事直接用的ElementUI组件 使用默认的参数在表格所在的容器大小变化时会发生错位问题 如下图所示 网上的一些方法基本都试过了 没啥作用 可能是方式不对 最后查询ElementUI文档 在el table
  • 开关稳压电源设计

    文末下载完整资料 摘要 本设计应用隔离型回扫式DC DC电源变换技术完成开关稳压电源的设计及制作 系统主要由整流滤波电路 DC DC变换电路 单片机显示与控制电路三部分组成 开关电源的集成控制由脉宽调制控制芯片UC3843及相关电路完成 利
  • linux编程第一部分总结

    C 多线程安全原则 对象析构很复杂 我们采用shared ptr和weak ptr来做 enable shared from this lt gt 是用来做回调的 因为多线程中可能对象的生命周期比传出去的this指针短 同时为了不延长对象的
  • 碎片笔记

    前言 与传统的AI攻防 后门攻击 对抗样本 投毒攻击等 不同 如今的大模型攻防涉及以下多个方面的内容 目录 一 大模型的可信问题 1 1 虚假内容生成 1 2 隐私泄露 二 大模型的安全问题 2 1 模型窃取攻击 2 2 数据窃取攻击 2
  • python-ue4-metahuman-nerf:我创造了一个数字人!!

    原文 https zhuanlan zhihu com p 561152870 目录 收起 1 准备工作 制作 MetaHuman 角色 1 1 创建 MetaHuman 角色 1 2 Quixel Bridge 下载 MetaHuman
  • android 恢复出厂设置流程分析,Android恢复出厂设置流程分析

    最近看恢复出厂的一个问题 以前也查过这方面的流程 所以这里整理一些AP framework层的流程 在setting gt 备份与重置 gt 恢复出厂设置 gt 重置手机 gt 清除全部内容 gt 手机关机 gt 开机 gt 进行恢复出厂的
  • unity 五种旋转方式localEulerAngles、eulerAngles、rotation、localRotation和Rotate的区别

    1 1 transform localEulerAngles 使用localEulerAngles进行旋转的时候 我们要使用transform localEulerAngles new Vector3 x y z 其中 new Vector
  • 矩阵 行列式的计算

    行列式要求 要计算行列式 那么这个矩阵一定是一个方阵 行列式性质 行列式转置后值不变 互换行列式中两行 值变为相反数 行列式中两行成比例 行列式为0 行列式中一行所有元素乘以一个数后加到另一行 行列式值不变 行列式的计算有很多方法 矩阵的行
  • GPT专业应用:自动撰写宣传稿

    图片由Lexica 生成 输入 Staff working on product promotion 宣传稿是指按照有关政策文件或相关精神 以宣传某种主张 某项工作 某件事情等为目的 为获得理解 支持而撰写的应用文 基本格式包含四个要素 分
  • React 初学 - 使用 If/Else 条件进行渲染以及使用 && 获得更简洁的条件- 个人笔记50

    MyComponent 的 state 中包含一个布尔值 用于跟踪是否要在 UI 中显示某个元素 按钮切换此值的状态 目前 它每次都呈现相同的 UI 用if else语句重写render 方法 如果display为true则返回当前标记 否
  • CARLA平台+Q-learning的尝试(gym-carla)

    接触强化学习大概有半年了 也了解了一些算法 一些简单的算法在gym框架也实现了 那么结合仿真平台Carla该怎么用呢 由于比较熟悉gym框架 就偷个懒先从这个开始写代码 项目地址 https github com cjy1992 gym c
  • 3、上台阶问题

    问题描述 有n级楼梯 有2种爬法 1次1级 2级 n级楼梯有多少种爬法 解决思路 n 1 1种爬法 n 2 2种爬法 n 3 第一次爬1级 有2种爬法 第一次爬2级 有1种爬法 共3种爬法 第n次爬楼梯 f n f n 1 f n 1 代码
  • 成功解决ubuntu-22.04的sudo apt-get update一直卡在【0% [Waiting for headers]】

    成功解决ubuntu 22 04的sudo apt get update一直卡在 0 Waiting for headers 问题描述 解决方案 问题描述 在下载安装包的时候一直卡在0 Waiting for headers 报错信息如下
  • 【动态内存管理】

    目录 前言 一 动态内存开辟函数 一 malloc 二 free 三 calloc 四 realloc 二 常见错误 一 对NULL指针解引用 二 对动态开辟空间的越界访问 三 对动态开辟内存多次free 四 未在初始位置进行free 五
  • 软件技术国产化

    软件技术国产化 如果大家做的项目是涉及国企 政府 校园的 应该都有听过 技术国产化 其实不单单是软件开发这一块 其它行业也会有这一说法 自从中美之间发生贸易战 美国对中国一些企业进行制裁 甚至封杀 像我们软件开发这行 会限制一些开发工具 技
  • 【面试题】java常考面试题

    java中sleep方法和wait方法的区别 sleep是线程中的方法 但是wait是Object中的方法 sleep方法不会释放锁 但是wait会释放锁 sleep方法不依赖于同步器synchronized 但是wait需要依赖synch
  • 进程-进程标识符

    什么是进程标识符 系统给每个进程定义了一个唯一标识该进程的非负正数 称作进程标识符 进程标识符可以简单的表示为主进程表中的一个索引 当某一进程终止后 其标识符可以重新用作另一进程的标识符 不过 在任何时刻 一个标识符所代表的进程是唯一的 系
  • 在VMware Workstation Pro中安装Windows 11正式版(包括添加TPM 2.0支持,而不是忽略)

    目录 0 首先检查Windows 11需要的环境 1 创建一个虚拟机 1 1 选择使用下载好的Windows11镜像 1 2 选择操作系统为Windows 10 x64 1 3 给虚拟机系统起个名字并指定存放路径 1 4 把创建的虚拟硬盘大
  • JDBC程序具体实现步骤演示

    再熟悉JDBC的编程步骤后 接下来通过一个案例并依照上一小节所讲解的步骤来演示JDBC的使用 此案例会从tb user表中读取数据 并将结果打印在控制台 需要说明的是 Java中的JDBC是用来连接数据库从而执行相关数据相关操作的 因此在使