JDBC编程---Java

目录

一、数据库编程的前置

二、Java的数据库编程----JDBC

1.概念

2.JDBC编程的优点

三.导入MySQL驱动包

四、JDBC编程的实战

1.创造数据源,并设置数据库所在的位置,三条固定写法

2.建立和数据库服务器之间的连接,连接好了后,才能进行后续的 请求-响应 交互。

3.构造SQL语句

4.把sql发给服务器

5.释放资源,关闭连接

五、动态拼接写法


一、数据库编程的前置

1.编程语言:如 Java , C 、 C++ 、 Python 等 。
2.数据库:如 Oracle , MySQL , SQL Server 等 。
3.数据库驱动包不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如: MySQL 提供了 Java 的驱动包 mysql-connector-java ,需要基于 Java 操作 MySQL 即需要该驱动包。同样的,要基于 Java 操作 Oracle 数据库则需要 Oracle 的数据库驱动包 ojdbc。

二、Java的数据库编程----JDBC

1.概念

JDBC是数据库连接是一种用于执行SQL语句的java API,就类似于一个网址,它是java中的数据库连接规范,这个API里面由java.sql.*,javax.sql.*包中的一些类和接口组成,这些都可以为实现sql做基础,这些都为java开发人员操作数据库提供了一个标准的API,可以为多重关系数据库提供同意的访问。

2.JDBC编程的优点

直接底层操作,提供了简单,便捷的访问数据库的方法,跨平台性较强,灵活比较强,可以执行很复杂的SQL语句,说白了就是JDBC要通过Java代码操作数据库。

三.导入MySQL驱动包

(1)准备数据库驱动包

首先我们需要去MySQL的Maven中央仓库,下载我们的jar包。

Maven中央仓库  -->输入mysql-->MySQL Connector Java -->选择版本

必须选择和我们MySQL对应的版本,博主使用的就是MySQL5.7系列的,那么选择5开头的任意一个都可以,点击进去。

我们有两种方法导入驱动包。

1.导入jar包

2.依赖注入   (这里我们只讲这种,个人认为这种方法最为简便)

我们上一步之后跳转以下页面,复制以下内容,粘贴到 pom.xml文件 <dependencies> </dependencies>中,然后刷新以下Maven

这样我们的依赖注入就完成了。。


四、JDBC编程的实战

一般的jdbc开发分为五大具体步骤

1.创造数据源,并设置数据库所在的位置,三条固定写法

DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textclass?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");//设置用户名 固定是root 也可以配置别的
((MysqlDataSource)dataSource).setPassword("数据库密码");//设置密码 登录数据库密码

分析 setUrl() 方法里边内容:

jdbc:mysql 表示这个url是给jdbc中的mysql来使用的。

127.0.0.1 表示IP地址-> 这里称为环回IP 表示主机自己(相当于Java中的this)。

3306 代表端口号, 一般默认是3306 这么多程序你要把网络数据交给哪个程序呢?

textclass表示要访问的数据库名。

characterEncoding=utf8 访问的字符编码方式。

useSSL=false useSSL表示加密,此处没必要加密 手动关闭。

2.建立和数据库服务器之间的连接,连接好了后,才能进行后续的 请求-响应 交互。

Connection connection=dataSource.getConnection();

注意是第一个,我们很多人都选过第二个,导致报错,哈哈哈哈哈

3.构造SQL语句

假如我们要往student表中插入一条数据。(首先是要有student这张表,提前已经创建过了)

String sq1 ="insert into student values(1,'张三')";//描述了sql是啥样的

真正执行SQL语句用到PreparedStatement这个类库,后面的括号里面传入我们的SQL语句。

PreparedStatement statement = connection.prepareStatement(sq1);//真正的执行语句

4.把sql发给服务器

返回值是一个整数,表示影响到的行数

这里面我们会用到executeUpdate这个函数,它的返回值是一个整数,我们定义一个ret用来接收

int n= statement.executeUpdate();System.out.println("n ="+n);

注意: 针对 增 删 改:使用executeUpdate  

            针对      查    : 使用executeQuery

5.释放资源,关闭连接

(释放顺序是后获取到的资源,先释放,与创建的顺序是相反的)

statement.close();
connection.close();

五、动态拼接写法

那么这里步骤没有变化,唯一变化的就是我们需要添加输入语句,还有sql的写法:

输入语句

Scanner sc=  new Scanner(System.in);System.out.println("请输入学号:");int id = sc.nextInt();System.out.println("请输入姓名:");String name = sc.next();

拼接写法SQL:

String sql ="insert into student values("+id+",'"+name+"')";
PreparedStatement statement = connection.prepareStatement(sql);

那么这种字符串拼接的方式 是不是太丑了呢?如何改进

使用下面的动态拼接,注意写法我们通过?的形式这里我们称之为'占位符',实现我们的构造。

String sq1 ="insert into student values(?,?)";//动态拼接
PreparedStatement statement = connection.prepareStatement(sq1);statement.setInt(1,id);//按照下标依次替换 注意下标从1开始计算statement.setString(2,name);
System.out.println("sql "+ statement);
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class Demo1 {public static void main(String[] args) throws SQLException {//1.创建 DateSourceDataSource dataSource=new MysqlDataSource();((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/textclass?characterEncoding=utf8&useSSL=false");((MysqlDataSource)dataSource).setUser("root");((MysqlDataSource)dataSource).setPassword("2003");//2.建立和数据库服务器之间的连接,连接好了后,才能进行后续的 请求-响应 交互。Connection connection=dataSource.getConnection();//3.构造sqlString sql ="insert into student values(1,'张三')";PreparedStatement statement= connection.prepareStatement(sql);//4.把sql发给服务器,返回值是一个整数,表示影响到的行数int n= statement.executeUpdate();System.out.println("n ="+n);//5.释放资源,关闭连接,释放顺序,是后获取到的资源,先释放statement.close();connection.close();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速图像识别:落叶植物叶片分类

1.背景意义 研究背景与意义 随着全球生态环境的变化&#xff0c;植物的多样性及其在生态系统中的重要性日益受到关注。植物叶片的分类不仅是植物学研究的基础&#xff0c;也是生态监测、农业管理和生物多样性保护的重要环节。传统的植物分类方法依赖于人工观察和专家知识&…

数字化那点事:一文读懂物联网

一、物联网是什么&#xff1f; 物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是指通过网络将各种物理设备连接起来&#xff0c;使它们可以互相通信并进行数据交换的技术系统。通过在物理对象中嵌入传感器、处理器、通信模块等硬件&#xff0c;IoT将“…

IntelliJ+SpringBoot项目实战(十)--常量类、自定义错误页、全局异常处理

一、常量类 在项目开发中&#xff0c;经常需要约定一些常量&#xff0c;比如接口返回响应请求指定状态码、异常类型、默认页数等&#xff0c;为了增加代码的可阅读性以及开发团队中规范一些常量的使用&#xff0c;可开发一些常量类。下面有3个常量类示例&#xff0c;代码位于op…

ubuntu20.04的arduino+MU编辑器安装教程

arduino 按照这个博客&#xff0c;是2.3版本的&#xff1a; Ubuntu20.04/22.04 安装 Arduino IDE 2.x_ubuntu ide-CSDN博客https://blog.csdn.net/michaelchain/article/details/128744935以下这个博客是1.8版本的 在ubuntu系统安装Arduino IDE的方法_ubuntu arduino ide-CS…

Docker核心概念总结

本文只是对 Docker 的概念做了较为详细的介绍&#xff0c;并不涉及一些像 Docker 环境的安装以及 Docker 的一些常见操作和命令。 容器介绍 Docker 是世界领先的软件容器平台&#xff0c;所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为…

Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构

目录 Redis 数据类型 一、String&#xff08;字符串&#xff09; 二、Hash&#xff08;哈希&#xff09; 三、List&#xff08;列表&#xff09; 四、Set&#xff08;集合&#xff09; 五、ZSet(sorted set&#xff1a;有序集合) 六、BitMap 七、HyperLogLog 八、GEO …

uniapp接入BMapGL百度地图

下面代码兼容安卓APP和H5 百度地图官网&#xff1a;控制台 | 百度地图开放平台 应用类别选择《浏览器端》 /utils/map.js 需要设置你自己的key export function myBMapGL1() {return new Promise(function(resolve, reject) {if (typeof window.initMyBMapGL1 function) {r…

Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx&#xff0c;第一个就是官方镜像库&#xff0c;这里使用1.27.2版本演示 1.下载镜像 docker pull nginx:1.27.2 2.测试运行 docker run --name nginx -p 9090:80 -d nginx:1.27.2 这里绑定了宿主机的9090端口&#xff0c;只要访问宿主机的9090端口&#…

AmazonS3集成minio实现https访问

最近系统全面升级到https&#xff0c;之前AmazonS3大文件分片上传直接使用http://ip:9000访问minio的方式已然行不通&#xff0c;https服务器访问http资源会报Mixed Content混合内容错误。 一般有两种解决方案&#xff0c;一是升级minio服务&#xff0c;配置ssl证书&#xff0c…

人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状

一、简述 微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点: 持续时间短,通常只有1/25s~1/3s;动作强度低,难以察觉;在无意识状态下产生,通常难以掩饰或伪装;对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。由于微表情在无意识状态…

2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

一、单选题 1、下面代码运行后出现的图像是&#xff1f;&#xff08; &#xff09; import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案&#xff1a;A 答案…

Spring Aop+自定义注解实践(待完善日志)

目录 前言 1.引入依赖 2.SpringAop的用法举例 3. 自定义注解AOP的用法举例 3.1 关于Target注解补充 3.2 关于Retention注解补充 3.3 举例 前言 如果你不太理解aop的知识&#xff0c;请看我写的这篇文章&#xff0c;非常详细&#xff1a; Spring AOP&#xff08;定义、…

OpenCV双目立体视觉重建

本篇文章主要给出使用opencv sgbm重建三维点云的代码&#xff0c;鉴于自身水平所限&#xff0c;如有错误&#xff0c;欢迎批评指正。 环境&#xff1a;vs2015 &#xff0c;opencv3.4.6&#xff0c;pcl1.8.0 原始数据使用D455采集&#xff0c;图像已做完立体校正&#xff0c;如下…

【进阶系列】python简单爬虫实例

python有一个很强大的功能就是爬取网页的信息&#xff0c;这里是CNBlogs 网站&#xff0c;我们将以此网站为实例&#xff0c;爬取指定个页面的大标题内容。代码如下&#xff1a; 首先是导入库&#xff1a; # 导入所需的库 import requests # 用于发送HTTP请求 from bs4 impor…

Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

1. 产品定位 Ease Monitor 有如下的产品定位&#xff1a; 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据&#xff1a;基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

目录 一&#xff0c;数组翻转 二&#xff0c;冒泡排序 三&#xff0c;二分查找&#xff08;一尺之锤&#xff0c;日取其半&#xff0c;万世不竭&#xff09; 一&#xff0c;数组翻转 1.概述:数组对称索引位置上的元素互换&#xff0c;最大值数组序号是数组长度减一 创建跳板…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare&#xff08;金融数据库&#xff09;入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

网络编程(JAVA笔记第三十八期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 网络编程概念网络编程三要素IPInetAddress类端口号协议 UDP协议UDP通信程序(发送数据)UDP通信程序(发送数据)使用UDP写聊天室项目UDP的通信方式 TCP协议通过TCP协议实现多发多收通…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…