JDBC在IDEA中配置mysql过程及编程详解

2023-10-28

目录

jdbc编程简介

1.导入jar包

2.建立数据库连接 

2.1 创建数据源,描述数据库服务器在哪

2.2 实现一个mysql客户端,通过网络和服务器进行通信

3.使用代码操作数据库

3.1 增删改操作

增加操作

更新操作

删除操作

3.2 查询操作

4.断开连接,释放资源


jdbc编程简介

JDBC,Java Database Connectivity ,java数据库连接.是一种执行SQL语句的API,是java中数据库连接规范,这个API由java.sql.*,javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问

1.导入jar包

jar包下载地址:

https://mvnrepository.com/

1.输入地址->输入mysql搜素

32c9b8dc5c9e46e4832e288a4c93b468.png

2.点击第一个后选择版本

352d535adc0144de92b138595e73f842.png3.选择版本和本机mysql大版本相同的 jar包

fdc7dd9cb5a248078bb2811496dd2ade.png4. 点击下载jar包

eb711b07cc364c77bb08c975b18f226f.png 5.创建lib包,导入jar包,直接cv

1b1d1b0a41694deda11b4797a869cfff.png

 cecbecd52bc84e56b37d0000b6fb1e54.png

6.右击lib->点击Add as Library

e463ebf1880d4516ac705245df51591d.png

 21a808cba72c41a6bac7d5f3a673aaf4.png

 此时就解析出了jar包中的内容,我们就可以进行对数据库据的编程了

2.建立数据库连接 

和数据库建立连接时,需要用到数据库,首先创建一个数据库和一张表然后进行数据库连接

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

jdbc编程时用到的资源,必须要导入jar包才能用

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.*;

2.1 创建数据源,描述数据库服务器在哪

使用 DataSource 描述 MySQL 服务器的位置. 

DataSource是SUN官方数据库连接池标准接口,由第三方组织实现此接口,该接口提供了获取连接的功能

Connection getConnection()

DataSource dataSource = new MysqlDataSource();       

    ((MysqlDataSource)dataSource).setUrl
    ("jdbc:mysql://127.0.0.1:3306/java_2?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");                            
    ((MysqlDataSource)dataSource).setPassword("123456");

 url是资源唯一地址定位符,就是网址
127.0.0.1:数据库服务器所在的IP地址,这是个特殊的IP,表示主机自己,环回网址,相当于this.
只要数据库服务器和jdbc程序在一台电脑上都可以使用这个IP
:3306是端口号,安装时默认的,使用IP确定了主机,网络数据报给那个程序是通过端口号来识别出数据库服务器的
java_2数据库名
characterEncoding=utf8字符编码方式
useSSL=false关闭加密功能

2.2 实现一个mysql客户端,通过网络和服务器进行通信

Connection connection = dataSource.getConnection();

 要注意使用Java.sql的Connection 

b5a62de7e1cd4f97871babadf530c85e.png

3.使用代码操作数据库

控制客户端给数据库发送请求,执行操作

3.1 增删改操作

增删改和查询稍有不同~ 

增加操作

构造 SQL 语句. JDBC 操作数据库, 本质仍然是通过 SQL 来描述数据库操作 

String sql = "insert into student values(001,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);
int ret = statement.executeUpdate();
statement.close();
connection.close();

String sql 描述的是sql是什么样的

还需要一个特殊的类:

执行是靠PreparedStatement,它会对sql进行一些预处理,解析之类的,之前通过cmd输入的语句是发送给服务器端让服务器进行解析

 b76e9a0477b5429db73b9f367ae4ac92.png

当前数据是写死的,我们更希望是动态的 

我们通过控制台输入一些信息,来操作数据库

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();
        String sql = "insert into student values(" + id + ",'" + name+ "')";
        PreparedStatement statement = connection.prepareStatement(sql);
        int ret = statement.executeUpdate();

0b0b6cfc5cb84b9f8166399c1ed12dcc.png

 b9681700d7a54d64a7432855bbef85cb.png

但是这种操作还存在一个问题

07ba66806bbb4faaa0896c35895d014d.png

这样的代码可读性很低,另一方面,这个代码还容易引起SQL注入攻击

ec63f777d20a46e9b9eaef6c5b8a7afb.png如果输入这样的代码就会在插入的同时引起很多其他的问题

因此我们提出更靠谱的方案: 通过占位符替换的方法输入操作信息

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();
        String sql = "insert into student values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        int ret = statement.executeUpdate();

c158233b3ecd45fd84c19fc9e6ed26c1.png

265f1351943a42fcac426b75d555f52f.png

 注意:这里的占位符下标是从1开始的!!

b2497967ec1744aca2ed4db46bf734b0.png

执行增加,删除,更新三个操作用executeUpdate执行,代码和增加的代码是相同的

执行查询操作使用executeQuery

PreparedStatement的好处:
预编译SQL,性能更高

性能更高体现在:PreparedStatement中的参数可以使用占位符进行占位,然后执行SQL时,只需要对SQL进行预编译一次,我们利用占位符重新设置参数,这样就不用重复执行检查SQL语法和编译SQL语句了!这样就提高了性能

防止SQL注入,会将敏感字符转义.

 

更新操作

也是通过占位符来操作

Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学号");
        int id = scanner.nextInt();
        System.out.println("请输入修改的姓名");
        String name = scanner.next();
        String sql = "update student set name = ? where id = ? ";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1,name);
        statement.setInt(2,id);
        int ret = statement.executeUpdate();
statement.close();
connection.close();

数据库中的结果:

mysql> select*from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    3 | 王五 |
|    5 | 赵六 |
+------+------+
4 rows in set (0.00 sec)
更新后:

mysql> select*from student;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 张三   |
|    2 | 李四   |
|    3 | wangqi |
|    5 | 赵六   |
+------+--------+
4 rows in set (0.00 sec)

删除操作

Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的学号");
        int id = scanner.nextInt();

        String sql = "delete from student where id = ? ";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        int ret = statement.executeUpdate();
statement.close();
        connection.close();

 7764b78af32144238553159393365c92.png

 结果:

mysql>  select*from student;
+------+------+
| id   | name |
+------+------+
|    1 | 张三 |
|    2 | 李四 |
|    5 | 赵六 |
+------+------+
3 rows in set (0.00 sec)

三个操作的代码是相同的 

执行时给服务器发送网络请求

int ret = statement.executeUpdate();

ret返回的是一个整数,表示执行的结果影响到了多少行

3.2 查询操作

查询操作用到的是

ResultSet ret = statement.executeQuery();

与上面三个操作不同的是:

executeUpdate 只能返回一个 int.

executeQuery 返回的是一个 ResultSet 对象. 可以把这个对象视为是一个 "临时表"

增删改返回的是影响的行数,只返回一个整数

查询的结果集合是一张表,因此比其它几个操作多一个遍历,遍历后才能看到结果

String sql = "select*from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet ret = statement.executeQuery();
        //遍历临时表, 拿到里面的数据.
        //    resultSet 简单的当成一个类似于 "迭代器" 
        //    next 如果没有到达末尾, 就是返回 true, 要继续循环.
        //    next 如果到达末尾, 就返回 false, 结束循环.
        while(ret.next()) {
            int id = ret.getInt("id");
            String name = ret.getString("name");
            System.out.println("id: "+id+" name: "+name);
        }
        ret.close();
        statement.close();
        connection.close();

获取哪一列,就用getXXX方法 ,XXX为列的类型

结果:

ce8708e1ab814f18b906fae1ad451677.png

4.断开连接,释放资源

java有GC即垃圾回收机制,会自动处理申请的内存,但是像这种连接的资源还需要我们手动释放

资源的释放顺序是和创建顺序相反的

释放的顺序:先用到的资源后释放

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

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

JDBC在IDEA中配置mysql过程及编程详解 的相关文章

随机推荐

  • arduino uno官方原理图_Arduino基础入门篇27—步进电机驱动库的使用

    本篇介绍步进电机驱动库的使用 通过读取电位器输入 控制步进电机转动相应角度 Stepper库是官方提供的驱动库 我们启动Arduino IDE 点击 文件 示例 就能找到Stepper库 官方提供了四个例程 关于Stepper库可参考官方介
  • vscode配置xdebug调试

    参考 vscode配置PHP调试xDebug wx61cd54ea3a202的技术博客 51CTO博客 Xdebug V3 不会停止 VSCode 中的断点 1 打印php信息 2 打开 Xdebug Support Tailored In
  • JavaFX制作餐厅管理系统(附源码)

    相信有很多同学在做毕业设计或者是提升自己的会选择做一个系统 下面从各个方面了解制作餐厅管理系统 以下均为up主个人思路 有错误的地方欢迎各路大佬指点 非常感谢 供各位同学参考学习 前言 制作思路 资料准备 功能实现 最后优化 注意 餐厅管理
  • MySQL:二、Table约束,多表联查,数据库备份、恢复

    目录 一 数据的完整性 约束 1 1 实体完整性 1 1 1 主键约束 primary key 1 1 2 唯一约束 1 1 3 自动增长列 1 2 域完整性 1 2 1 非空约束 not null 1 2 2 默认值约束 1 3 外键约束
  • 【git】LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

    1 概述 今天git 拉取一个项目报错 lcc lcc IdeaProjects third git clone https github com xxxx xxxx git Cloning into xxxx
  • SM4算法设计原理

    SM4分组密码算法描述 SM4分组密码算法是一个迭代分组密码算法 由加解密算法和密钥扩展算法组成 SM4分组密码算法采用非平衡Feistel结构 分组长度为128b密钥长度为128b 加密算法与密钥扩展算法均采用非线性迭代结构 加密运算和解
  • BP神经网络(输出层采用Softmax激活函数、交叉熵损失函数)公式推导

    本篇博客主要介绍经典的三层BP神经网络的基本结构及反向传播算法的公式推导 我们首先假设有四类样本 每个样本有三类特征 并且我们在输出层与隐藏层加上一个偏置单元 这样的话 我们可以得到以下经典的三层BP网络结构 当我们构建BP神经网络的时候
  • Unity中获取鼠标点击转换

  • md格式C++代码没有颜色解决方法

    md格式C 代码没有颜色解决方法 我们在Typora中使用代码块编写代码时 选择了C 语言 在本地文件中是可以看到关键词特殊颜色的 但是导入CSDN编辑器中 右侧预览窗口代码块的颜色却变成了灰色 这是因为Typora的C 代码块选择了 c
  • idea插件备份以及推荐

    IDEA之我不得不留的插件 精心整理 俗话说 工欲善其事 必先利其器 Alibaba Java Coding Guidelines 2017年10月14日杭州云栖大会 Java代码规约扫描插件全球首发仪式正式启动 规范正式以插件形式公开走向
  • 基于ensp的中大型企业网络安全解决方案的设计与实施

    一 需求背景 公司部门具体背景 公司共设有人事部 财务部 销售部 市场部四个部门以及一个员工宿舍楼 公司有对外互联网业务需要提供 公司内存在重要部门需要保护数据安全以及访问控制 1 根据客户需求 部门 拓扑 划分vlan及子网 2 使用合理
  • 刷脸支付成了不少商家抗衡疫情冲击的利器

    凭借高科技支付方式出圈的刷脸支付 高效便捷只是它诸多优势之一 在众多优势中 有一个优势无法被其他事物所替代 这也是刷脸支付备受青睐的主要原因助力线下行业实现智慧经营 存在物就像是奔腾不息的河流 事物处于不断变化之中 面对每一刻的崭新 无人可
  • Ubuntu14.04 更换内核重启出现:Missing Modules

    1 前言 最近由于实验的需要 需要更换Linux系统的内核 我的系统是Ubuntu14 04 内核版本时3 19 由于实验的平台需要内核版本3 14 0 只好将Ubuntu14 04的内核从3 19降级到3 14 0 在编译安装之后 运行命
  • Vue中数组赋值问题

    出现的问题 昨天工作内遇到的问题 用输入arrList渲染了一个表格 修改了arrList 然而列表没有改变 Vue 不是双向绑定吗 怎么回事 what s fuck 值变了 列表没有变 测试代码 Vue中列表渲染的数据是这样的 单价和数量
  • 详解 Windows 10 安装 CUDA 和 CUDNN

    目录 查看本机 Window 10 系统已经安装 NIVIDIA 的驱动版本 说在前面 查看驱动版本 CUDA 下载 直接下载最新的 CUDA 下载历史版本的 CUDA 安装 测试 CUDNN 下载 下载最新版本的 cuDNN 下载历史版本
  • linux 多线程 pthread_cond_wait(&cond,&mutex)理解

    pthread cond wait 用于阻塞一个线程 知道有信号唤醒它 下面是一个简单的例子 我们可以从程序的运行来了解条件变量的作用 pthread cond wait c include
  • js逆向之有道词js加密解析

    js逆向之有道词js加密解析 文章目录 js逆向之有道词js加密解析 需要用到的工具 下面就介绍一下3种看js加密的代码方法 第一种方法 第二种 第三种 下面我们来了解我们要用什么解密md5 下面做一个js加密解析十分适合上手的 有道词典的
  • Unity 抠图 shader

    Created by Oliver Davies Enjoy oliver psyfer io Shader Unlit ChromaKey Properties MainTex Texture 2D white KeyColor KeyC
  • 基于阿里云ECS服务器搭建k8s集群

    此处仅有两台服务器 一台master节点 一台node节点 后期可按照步骤继续增加node节点 1 搭建环境 Master节点 CPU 2核 内存 2GiB 操作系统 Centos7 6 64位 带宽 1Mbps 服务器公网IP 私有IP
  • JDBC在IDEA中配置mysql过程及编程详解

    目录 jdbc编程简介 1 导入jar包 2 建立数据库连接 2 1 创建数据源 描述数据库服务器在哪 2 2 实现一个mysql客户端 通过网络和服务器进行通信 3 使用代码操作数据库 3 1 增删改操作 增加操作 更新操作 删除操作 3