JDBC编程的学习——MYsql版本

目录

前言

什么是JDBC ???

前置准备

使用JDBC的五个关键步骤

1.建立与数据库的连接

2.创建具体的sql语句和Statement

3.执行SQL语句

4.处理结果集

5.释放资源

完整流程展示


前言

笔者在先前的博客就提过会写关于JDBC的内容

[Mysql] 的基础知识和sql 语句.教你速成(上)——逻辑清晰,涵盖完整-CSDN博客

作为一个初学者,JDBC很大程度上解决了我之前的困惑——应用程序是怎么和数据库关联起来的

在本文中,我以先前分享过的图书管理系统为例子,来向大家初步介绍如何使用JDBC

图书管理系统(java) 代码展示和思路介绍 (9000字小长文)_图书管理系统关键代码展示-CSDN博客

什么是JDBC ???

JDBC ,即 Java Database Connectivity java 数据库连接。
是一种用于执行 SQL 语句的 Java API ,它是 Java中的数据库连接规范。
这个 API java.sql.*,javax.sql.* 包中的一些类和接口组成,
它为 Java 开发人员操作数据库提供了一个标准的API ,可以为多种关系数据库提供统一访问。
JDBC提供了一个统一的接口,使得Java应用程序可以与任何支持JDBC标准的关系型数据库进行交互,无需关心具体的数据库实现细节。这种平台无关性使得开发的应用程序可以轻松地在不同的数据库系统上运行。
话句话说,通过使用JDBC以及它升级过的版本,我们就可以用相对低的知识成本,使JAVA程序连接数据库
在之前的图书管理系统中笔者就说过,程序的缺陷就是没法长期保存数据,一旦程序执行结束,数据就会丢失,因此,我们可以将它写入我们的MYsql数据库中,长期保存.

前置准备

1.下载好驱动包

2.创建好项目以后,再创建目录存放驱动包,并且设置为library

具体操作可以看我另一篇博客

图文讲解IDEA如何导入JDBC驱动包-CSDN博客

使用JDBC的五个关键步骤

1.建立与数据库的连接

在Java中创建一个数据源(DataSource)对象,并实例化为MySQL数据库的数据源(MysqlDataSource) (向上转型)

然后设置好 URL  User 和Password   

其中关于URL 说明如下:

URL(Uniform Resource Locator,统一资源定位符)是用于标识和定位互联网上资源的地址。它是一个字符串,描述了资源的位置和访问方式

URL是互联网中标准的资源定位方式,用于浏览器访问网页、下载文件、发送请求等操作。在编程中,通过URL可以指定需要访问的网络资源,进行网络通信和数据传输。

同时呢,代码如下

  DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jsh?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("你的数据库密码");

关于URL,作为我们自己练习来说,127.0.0.1 是一个回环IP地址 ,3306是我们的端口号, jsh在这代表连接哪个数据库,基本都是默认的,直接复制即可(除了连接什么数据库自己定)

然后建立连接

 Connection connection=dataSource.getConnection();

2.创建具体的sql语句和Statement

这里就要考验你的sql语句是否扎实了

举例来说

我们要写一个sql命令,它的数据类型是String

 String sql="insert into lib (name,author,price,type,state)values(?,?,?,?,default)";
default 是默认值,这么什么好说的,你肯定会疑惑?是什么
这里的?是占位符,便于我们在程序中输入数据以填充
我们以增加图书这个命令来看,代码如下
     System.out.println("增加图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入您要添加的图书的书名:");
        String name = scanner.nextLine();
        System.out.println("请输入您要添加的图书的作者名:");
        String author = scanner.nextLine();
        System.out.println("请输入您要添加的图书的类型:");
        String type = scanner.nextLine();
        System.out.println("请输入您要添加的图书的价格:");
        int price = scanner.nextInt();
        String sql="insert into lib (name,author,price,type,state)values(?,?,?,?,default)";
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
         preparedStatement.setString(1,name);
        preparedStatement.setString(2,author);
        preparedStatement.setInt(3,price);
        preparedStatement.setString(4,type);

在写好我们的命令以后,创建 PreparedStatement,它的作用是将sql语句传到数据库当中,

它也给了我们一组方法,可以手动输入数据去替换我们的占位符(?)

在方法中,左边的数字代表问好的位置,右边的标识符代表我们要替换的数据

3.执行SQL语句

现在,我们已经建立好连接,写好了命令,现在就需要他执行!

执行也有两种方法,分别去应用广义上的写(包括修改增加删除)和查询

 int n=preparedStatement.executeUpdate();

 这里我们以"写"作为例子去看

    int executeUpdate() throws SQLException;

 可以看到这是一个 int 方法,我们用n去接收,来查看有几条命令执行了

4.处理结果集

如果是查询操作,通常会有结果集,但这里我们就不细说了,到时候看案例就知道了

5.释放资源

顺序通常是释放最后调用的对象

 preparedStatement.close();
        connection.close();

完整流程展示

这里给大家看个大概的流程

     //1 创建
        DataSource dataSource=new MysqlDataSource();
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/jsh?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("你的密码");

        //2 建立链接
      Connection connection=dataSource.getConnection();

      //3 创建sql语句
        System.out.println("增加图书");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入您要添加的图书的书名:");
        String name= scanner.nextLine();
        System.out.println("请输入您要添加的图书的作者名:");
        String author = scanner.nextLine();
        System.out.println("请输入您要添加的图书的类型:");
        String type = scanner.nextLine();
        System.out.println("请输入您要添加的图书的价格:");
        int price = scanner.nextInt();
        String sql="insert into lib (name,author,price,type,state)values(?,?,?,?,default)";
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
         preparedStatement.setString(1,name);
        preparedStatement.setString(2,author);
        preparedStatement.setInt(3,price);
        preparedStatement.setString(4,type);

        //4 发送给服务器
        int n=preparedStatement.executeUpdate();

        //5 释放资源

        preparedStatement.close();
        connection.close();

具体案例更新在下篇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Security认证要点速记

登录校验流程 springSecurity已经为我们默认实现了一个用不着的登录功能,我们需要自己实现个符合我们需求的登录功能,所以我们需要去了解默认登录功能的流程,对其中的部分进行替换 SpringSecurity底层就是过滤器链,包含实现了各种…

(自用)多进程与信号

程序和进程 程序≠进程 产生进程 创建进程——fork函数 函数原型 #include <unistd.h> pid_t fork(void); 函数功能: fork函数的功能是创建一个与当前进程几乎完全相同的子进程。这个“几乎完全相同”指的是子进程会复制父进程的代码段、数据段、BSS段、堆、栈等所…

dledger原理源码分析(四)-日志

简介 dledger是openmessaging的一个组件&#xff0c; raft算法实现&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何实现raft概念&#xff0c;以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的日志&#xff0c;包括写入&#xff0c;复制…

esp32硬件电路设计

ESP-IDF 入门指南 | 乐鑫科技 (espressif.com) ESP32-DevKitC V4 入门指南 - ESP32 - — ESP-IDF 编程指南 v5.1 文档 (espressif.com)

看惯了黑黝黝的大屏风格再来看浅色系的大屏,很漂亮很个性

**看惯了黑黝黝的大屏风格&#xff0c;再来看浅色系的大屏&#xff0c;很漂亮很个性** 在科技产品的世界里&#xff0c;大屏设计一直以其沉浸感和视觉冲击力占据着一席之地。然而&#xff0c;当我们长时间沉浸在那些深邃、沉稳的黑黝黝大屏中时&#xff0c;是否曾想过换一种风…

VBA即用型代码手册:根据预定义的文本条件删除行

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

uni-app三部曲之三: 路由拦截

1.引言 路由拦截&#xff0c;个人理解就是在页面跳转的时候&#xff0c;增加一级拦截器&#xff0c;实现一些自定义的功能&#xff0c;其中最重要的就是判断跳转的页面是否需要登录后查看&#xff0c;如果需要登录后查看且此时系统并未登录&#xff0c;就需要跳转到登录页&…

电子电气架构 --- 智能座舱万物互联

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

windows防火墙端口设置

PS&#xff1a;本文实例为Windows Server 2019&#xff0c;其他Windows版本大同小异。 1、首先打开windows防火墙&#xff0c;点击“高级设置” 2、 高级设置界面 3、假设需要开放一个端口为3306应该怎么做 光标对准“入站规则”右键新建规则&#xff0c;选择“端口” 协议这…

【UE5.1 角色练习】16-枪械射击——瞄准

目录 效果 步骤 一、瞄准时拉近摄像机位置 二、瞄准偏移 三、向指定方向射击 四、连发 效果 步骤 一、瞄准时拉近摄像机位置 打开角色蓝图&#xff0c;在事件图表中添加如下节点&#xff0c;当进入射击状态时设置目标臂长度为300&#xff0c;从而拉近视角。 但是这样切…

Android 通知访问权限

问题背景 客户反馈手机扫描三方运动手表&#xff0c;下载app安装后&#xff0c;通知访问权限打不开。 点击提示“受限设置” “出于安全考虑&#xff0c;此设置目前不可用”。 问题分析 1、setting界面搜“授予通知访问权限”&#xff0c;此按钮灰色不可点击&#xff0c;点…

C++基础篇(1)

目录 前言 1.第一个C程序 2.命名空间 2.1概念理解 2.2namespace 的价值 2.3 namespace的定义 3.命名空间的使用 4.C的输入输出 结束语 前言 本节我们将正式进入C基础的学习&#xff0c;话不多说&#xff0c;直接上货&#xff01;&#xff01;&#xff01; 1.第一个C程…

JAVA分布式事务详情分布式事务的解决方案Java中的分布式事务实现

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

关于Python中的字典你所不知道的七个技巧

01 引言 Python是我最喜欢的编程语言之一&#xff0c;它向来以其简单性、多功能性和可读性而闻名。 字典作为Python中最常使用的数据类型&#xff0c;大家几乎每个人都或多或少在项目中使用过字典&#xff0c;但是字典里有一些潜在的技巧可能并不是每个同学都会用到。 在本文…

院内导航:如何用科技破解就医找路难题

自2019年开始“院内导航”被纳入医院智慧服务评估体系以来&#xff0c;到2023年改善就医服务升级的部署&#xff0c;每一步都见证了我国医疗卫生体系向智能化、人性化迈进的坚实步伐。 面对庞大复杂的医院环境与日益增长的就诊需求&#xff0c;如何让患者在茫茫人海中迅速找到就…

31_JQuery一文读懂,JS的升级版

今日内容 零、 复习昨日 一、JQuery 零、 复习昨日 1 js数组的特点(长度,类型,方法) - js数组的长度不限 - 类型不限 - 提供很多方法2 js中和的区别 - 判断数值相等 - 判断数值和数据类型同时相等3 js表单事件的事件名(事件属性单词) - 获得焦点 onfocus - 失去焦点 onblur …

干货:XXX智慧城市大数据共享交换平台建设方案(145页word)

引言&#xff1a;智慧城市大数据共享交换平台建设方案旨在构建一个高效、安全、可扩展的数据共享与交换生态系统&#xff0c;以促进城市内不同部门、机构及企业间的数据互联互通&#xff0c;推动数据资源的深度整合与利用&#xff0c;加速智慧城市建设进程。 方案介绍&#xff…

TongRDS 2214 docker版指引(by lqw )

文章目录 前言准备工作中心节点服务节点哨兵节点 前言 部署docker版本&#xff0c;建议先参考TongRDS2214手动部署版指引&#xff08;by lqwsy&#xff09; 在本地手动部署了一套适合业务场景的rds 服务后&#xff0c;再通过dockerfile 打镜像。 准备工作 1.准备对应的安装包…

开始性能测试之前的准备工作!

性能测试是软件测试中不可或缺的一部分&#xff0c;它可以帮助我们评估软件系统的性能表现&#xff0c;并找出潜在的性能瓶颈。在进行性能测试之前&#xff0c;需要做好充分的准备工作&#xff0c;以确保测试的有效性和准确性。 1. 确定性能测试的目标和范围 * 明确测试目标:性…

网口变压器下方是否要挖空探讨

一. 引言 1. RJ45组成 RJ45模块用于PHY芯片之间的互连&#xff0c;如图1所示&#xff0c;RJ45有两种组合形式&#xff0c;一种是分立式&#xff0c;网络变压器和RJ45连接座是分开的&#xff0c;另一种是网络变压器和RJ45集成在一起。RJ45连接座又分为带屏蔽与不带屏蔽两种。 …