当前位置: 首页 > news >正文

Java的数据库编程:JDBC

Content

🎉1什么是API

🎉2.什么是JDBC

🎉3.数据库驱动包的安装

🎉4.数据库安装包在idea的使用

🎉5.JDBC的增删改查的简单实现

今天为大家带来JAVA的数据库编程,也就是用Java实现数据库

数据库的最基本的操作就是增删改查

在实工作中,手敲sql语句几乎用不到,更多的是用代码来实现sql语句

像常见的数据库,比如mysal,sqlsever,Oracle等数据库软件,在开发的时候会提供编程的接口,叫做API

什么是API呢,也就是实现某种功能,例如Java的接口,就是API,比如Collection接口,里面有很多方法,可以实现很多功能,总的来说API多用于函数的形式来表示

现在要用Java实现数据库,那么也需要提供一个API用来对接Java和数据库,那么就要用JDBC,Java对数据库提出要求,数据库本来的功能上要增加一些来匹配Java,这样才可以让Java操作数据库,执行数据库.

JDBC,全称,Java Database Connectivity,是java和数据库的连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。可以为多种关系数据库提供统一访问.

Java通过JDBC操作数据库,那jdbc和数据库建立连接的时候,需要使用数据库驱动包,就是对不同数据库的原生API进行封装,封装成JDBC认识的API,,Java需要在项目导入数据库驱动包,也才能执行数据库,那么我们就需要下载驱动包,这里我们选择去maven中央仓库下载

上链接

https://mvnrepository.com/

这个要和自己下载的数据库的版本要匹配,因为我下载的是5系列的,所以我要用这个,5开头的都可以选

点击这个

然后下载了,之后,建立一个项目,然后在项目点新建directory,拷贝这个地址,就建立了lib文件

就像这样,这样数据库就和java建立连接了,现在就可以开始在idea编辑数据库代码了

还是和数据库一样,实现增删改查,上代码

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.ConnectionEvent;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** Created with IntelliJ IDEA.* Description:* User: WHY* Date: 2023-03-03* Time: 20:57*/
//JDBC实现sql
public class JDBCInsert {public static void main(String[] args) throws SQLException {//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.构造sql语句String sql="insert into student values(1,'张三')";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//4.执行sql语句int ret=  statement.executeUpdate();System.out.println(ret);//5.释放必要的资源statement.close();connection.close();}
}

看看执行结果,在idea上结果是1的原因是,stament.executeUpdate这个方法返回类型就是int型的,代表修改的行数

执行完以后记得释放资源

现在对这段代码进行优化,发现在构造sql语句的时候比较麻烦,进行优化

String sql="insert into student values(1,'张三')"; 

这个语句把要输入的内容写死了,也就是硬编码,在现实开发环境中,要为用户考虑,所以要写用户输入

public class JDBCInsert {public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();//4.构造sql语句String sql="insert into student values("+id+",'"+name+"')";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//5.执行sql语句int ret=  statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}

但是这种写法容易产生sql注入问题

 public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();//4.构造sql语句String sql="insert into student values(?,?)";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力statement.setInt(1,id);statement.setString(2,name);//5.执行sql语句int ret=  statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}

问号代表占位符,下面的setint里面的1,id代表第一个问号放id,第二个问号放name ,然后根据动态输入就自动放入到sql语句中

 

这一段就是Preparestatement方法拼接以后 的数据

释放资源:

数据库的客户端和服务器通过网络进行通信,需要占用一定的资源,但客户端很多,服务器很少时,要即及时释放资源

谁先创建,谁就后释放

DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率

现在写查询操作

public class TestDemo {public static void main(String[] args) throws SQLException {//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();//3.构造sql语句String sql="select* from student";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力//4.执行sql语句ResultSet resultSet= statement.executeQuery();//5遍历结果集合while(resultSet.next()){int id=resultSet.getInt("id");String name=resultSet.getString("name");System.out.println("+id+"+id+"name"+name);}//6.释放必要的资源resultSet.close();statement.close();connection.close();}

 resultset这个代表查询的结果集,用到的get方法相当于就是拿到某下标 的元素

删除操作

public static void main(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();/*//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");int id=scanner.nextInt();*///4.构造sql语句String sql="delete from student where id=1";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力/*  statement.setInt(1,id);statement.setString(2,name);*/System.out.println(statement);//5.执行sql语句int ret=  statement.executeUpdate();System.out.println(ret);//6.释放必要的资源statement.close();connection.close();}
}

修改操作

 public static void main1(String[] args) throws SQLException {Scanner scanner=new Scanner(System.in);//JDBC需要以下步骤完成开发//1.创建并初始化一个数据源DataSource dataSource=new MysqlDataSource();//向上转型((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的((MysqlDataSource)  dataSource).setUser("root");//设置用户名((MysqlDataSource)   dataSource).setPassword("1111");//就是数据库的密码//2.和数据库服务器建立连接Connection connection=dataSource.getConnection();/*//3.从控制台读取用户输入的的内容System.out.println("请输入姓名");String name=scanner.next();System.out.println("请输入学号");*//*int id=scanner.nextInt();*///3.构造sql语句String sql="update student set id=12 where name='张三'";PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力System.out.println(statement);//4.执行sql语句int ret=  statement.executeUpdate();System.out.println(ret);//5.释放必要的资源statement.close();connection.close();}

这就是今天的所有内容了,我们下期再见!!!

相关文章:

Java的数据库编程:JDBC

Content 🎉1什么是API 🎉2.什么是JDBC 🎉3.数据库驱动包的安装 🎉4.数据库安装包在idea的使用 🎉5.JDBC的增删改查的简单实现 今天为大家带来JAVA的数据库编程,也就是用Java实现数据库 数据库的最基本的操作就是…...

蓝桥冲刺31天之第六天

今天是摆子的一天,明天我要肝一整天的第四题!!! PS:一个普通的排序罢了 import java.io.*; import java.util.Arrays; import java.util.Scanner;/*** ClassName 考勤刷卡* Description TODO* Author 小怂很怂* Date 2…...

Streamlit 工具记录

Streamlit 是基于 Python 的 Web 应用程序框架,可视化数据,分析结果。 Streamlit 是一个开源库,可在短时间内开发机器学习可视化仪表板。只需几行代码就可以构部署强大的数据应用程序。Streamlit 可将仪表板的开发时间从几天缩短至几小时。 …...

GreenPlum小结

什么是GreenPlum?GreenPlum是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具有强大的大规模数据分析任务处理能力。GreenPlum作为大数据融合存储…...

C语言中数组和指针

文章目录前言一、指针的概念二、指针的大小三、指针的用法1.指针指向变量2.指针指向数组3.指针指向函数总结前言 本文将给大家带来C语言中非常重要的两个知识点,指针和数组。 一、指针的概念 指针,是C语言中的一个重要概念及其特点,也是掌…...

Leetcode.剑指 Offer II 022 链表中环的入口节点

题目链接 Leetcode.剑指 Offer II 022 链表中环的入口节点 mid 题目描述 给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 为了表示给定链表中的环&#…...

4种不同编程语言的打印方式

意义 打印方式是编程中不可或缺的一部分,它可以帮助开发人员有效地调试和测试代码,并提供有用的信息来监视程序的运行状态和性能。 编程语言中的打印方式是指将程序输出到终端或控制台上进行显示。这个功能在编程中非常重要,因为它可以帮助开…...

websocket介绍

我们聊聊轮询技术,什么是轮询?轮询就是在特定的时间间隔,由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。 轮询分为两种: 短轮询:通过不断的向服务端发送数据,客户端发送Request,服务端直接返回Response(不管服务端数据有没有改变)。长轮…...

Educational Codeforces Round 144 (Rated for Div. 2),C,D

C. Maximum Set 思路: 我们求最大数组,显然是L一直乘2,直到再乘2就越过区间位置。我们说过,再乘一个2就不行,那么我们除一个2,换句话说,就是再乘一个4就不行了。发现,我们可能有机会乘一个3&a…...

【redis学习篇】Redis三种持久化方式详解

官方文档 一、Redis持久性 Redis如何将数据写入磁盘 持久性是指将数据写入持久存储,如固态磁盘(SSD)。Redis提供了一系列持久性选项。其中包括: RDB(快照):RDB持久性以指定的时间间隔执行数据…...

垃圾回收中的分代年龄

为什么CMS里的分代年龄是6而不是15 CMS (Concurrent Mark Sweep) 是一种基于分代的垃圾收集器,其中分代年龄指的是一个对象在年轻代中经历了多少次垃圾收集。在 CMS 中,当一个对象的分代年龄达到阈值时,就会被晋升到老年代中。 在 CMS 中&a…...

蓝桥杯-左移右移(2022国赛)

蓝桥杯-左移右移1、问题描述2、解题思路与代码实现2.1 方法一:使用LinkedList双向链表实现(50%)2.2 方法二:使用HashMap左右临界值实现(100%)1、问题描述 小蓝有一个长度为 N 的数组, 初始时从左到右依次是 1,2,3,…N 。 之后小蓝对这个数组进行了 M 次操…...

你还在手撸SQL?ChatGPT笑晕在厕所

文章目录你还在手撸SQL?ChatGPT笑晕在厕所一、背景二、面向Chat编程1. 数据库设计2. 建表语句3. 加中文注释4. 数据模拟5. 查询成绩6. 修改课程任课老师7. 删除课程8. 删除一个有关联数据的课程总结你还在手撸SQL?ChatGPT笑晕在厕所 一、背景 经典3表设…...

【Redis】Redis慢查询

文章目录慢查询记录慢查询两个配置参数修改配置参数慢查询日志慢查询记录 我们都知道像mysql等持久化数据库会有慢查询日志,其实Redis中也有慢查询日志的功能。慢查询就是系统在执行命令的前后计算每条命令的执行时间,如果超过我们预设的时间&#xff0c…...

【Kubernetes】第二十一篇 - k8s 项目部署流程和操作梳理

一,前言 上一篇,介绍了 k8s 污点和容忍度; 在了解前面 k8s 介绍之后,设计并完成一个前后端项目的部署和持续集成; 本篇,介绍基于 k8s 项目部署流程设计; 二,项目部署流程设计 本…...

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

搜索Query理解和语义召回技术 随着用户规模和产品的发展, 搜索面临着越来越大的 query 长尾化挑战,query 理解是提升搜索召回质量的关键。本次将介绍搜索在 query term weighting,同义词扩展,query 改写,以及语义召回等方向上的实践方法和落地情况。 1.面临问题:长尾 qu…...

【项目精选】基于SSH的医院在线挂号系统(视频+论文+源码)

点击下载源码 医院挂号系统主要用于实现医院的挂号,前台基本功能包括:用户注册、用户登录、医院查询、挂号、取消挂号、修改个人信息、退出等。 后台基本功能包括:系统管理员登录、医院管理、科室管理、公告管理、退出系统等。 本系统结构如…...

Pandas库:从入门到应用(一)

一、Pandas简介 pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。 pandas的主要数据结构是 **Series(**⼀维数据)与 DataFrame (⼆维数据…...

MySQL中concat()、concat_ws()、group_concat()函数使用

在平时工作中,经常记不清或者记混他们的用法,正好有时间就记录一下~concat()函数语法:concat(str1, str2, int1...)例如执行sql:SELECT CONCAT(id,USERNAME,USER_PHONE) FROM tb_user输出查询结果为: 1test15216756754…...

【JavaEE初阶】第四节.文件操作 和 IO (上篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件 1.1 文件的概念 1.2 文件的路径二、 Java中文件系统操作 2.1 File类的属性 2.2 File类的构造方法 2.3 File类的方法 …...

开源免费堡垒机Teleport堡垒机的安装

准备:纯净centos7系统一个作为堡垒机,若干个linux系统或windows系统服务器作为受保护的服务器 堡垒机IP:192.168.1.15 服务器IP:192.168.1.10 1、teleport安装 下载地址: https://www.tp4a.com/static/download/teleport-server-linux-x64-3.6.4-b3.tar.gz xshell上传压缩…...

图形报表ECharts

图形报表ECharts1 图形报表ECharts1.1 ECharts简介-富客户端图表库ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏…...

便捷式储能电源核心技术--单相逆变器设计

便捷式储能电源核心技术–单相逆变器设计 1.逆变器的规格参数 输入电压直流400V输出电压交流rms220V开关频率10kHz滤波电容6.23uF控制方式单极性倍频2.视频学习链接 视频学习链接 3.主电路仿真设计...

Gamma矫正

Gamma 曲线Gamma校正被使用在8位RGB图中。用来解决在有限的存储空间中保存尽可能多的人类感受敏感的色彩内容。Gamma 矫正Gamma校正的方式就是采样时,和输出到显示器给人类看时,对亮度进行的调整.如采样时 Gamma1/2.2 调亮Gamma,如显示时 Gamma2.2 调暗Gamma实际亮度…...

速懂cookie,session,token

文章目录cookiesessiontoken区别cookie 是浏览器提供的一种能力,可以在每次发起请求前,带上cookie里面的内容(一些key,value值) 分类: 会话级cookie:默认情况,就是会话级cookie&…...

javaEE初阶 — HTML 中的常见标签

文章目录注释标签标题标签:h1 h6段落标签:p换行标签:br格式化标签图片标签:img1. img 的 alt 属性2. img 的 title 属性3. width 与 heigth 属性用来描述图的尺寸超链接标签:a表格标签列表标签表单标签1. from 标签2. …...

MySQL慢查询

2 慢查询 2.1 慢查询介绍 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL&…...

tensorflow【import transformers 报错】

目录 一、安装 安装好了tensorflow,但是import时候报错: import transformers 报错 一、安装 (1)创建环境: conda create -n [name] python3.3-3.7 (2)激活环境: conda activate [name] …...

JMU软件20 计算机网络复习

文章目录题型单位换算第一章协议与划分层次、网络协议的三个组成要素,分层的思想等协议网络协议的三个组成要素分层的思想⭐计算机网络体系结构OSI 的七层协议TCP/IP 的四层协议五层协议发送时延、传播时延、总时延、往返时间RTT计算第二章 物理层传输媒体导向性传输…...

Java基础之《dubbo(1)—dubbo基础入门》

一、为什么要使用dubbo 1、dubbo是什么 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 2、dubbo有何特点 (1)远程通讯:提供透明化的远程方法调用,提供…...