Java连接Mysql数据库

在使用Java连接Mysql数据库之前我们得先下载一个Mysql JDBC驱动程序,为了防止大家迷路,我把链接放下面了

【免费】MysqlJDBC驱动程序资源-CSDN文库

下载完了之后,我们就需要导入Mysql JDBC驱动程序啦~

1.首先我们先创建一个Java文件,比如这里我取的就是Mysql-Connect-Java,然后在项目中创建一个目录,比如这里我取的就是 lib (名字可以随便取,但是不要带有中文/特殊字符)

 2.把下载好的 jar 包拷贝到 lib 目录中,这里的拷贝可以直接右键选择jar包复制,然后到Java程序里面选择 lib 这个包右键粘贴,也可以直接在文件夹中进行拷贝,比如我们点击下方的jar包选择复制,然后进入到 lib 文件夹中选择粘贴

3.右键刚才的 lib 目录,点击add as library (目的是告诉idea,这个 lib 目录是一个“库”目录)

4.添加完“库”之后,idea就能自动分析出jar包里面有什么了

OK,以上就是我们的所有准备工作了,下面进入正是的代码环节


创建数据源

1.首先我们得先创建一个数据源对象,这个描述了数据从哪里来,数据库服务器所在的位置

DataSource dataSource = new MysqlDataSource();

这个DataSource是Java标准库,JDBC自带的接口,而后面的MysqlDataSource是来源于刚才导入的 .jar 包

2.给这个对象设置必要的属性

1)数据库服务器在哪里

((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?CharacterEncoding=utf8&useSSL=false");

下面是对这一长串的代码解释:首先

        ① jdbc:mysql这个的意思是使用JDBC API来连接Mysql数据库,如果要连接其他的数据库,就把mysql换成你要连接的那个数据库的名字

        ②127.0.0.1这是一个本机地址,应该你的mysql服务器和Java代码都是在同一个电脑上的,所以可以这样写,如果是在不同主机上,那么就再写别的地址

        ③3306这个一个端口号,用来区分一个主机上的应用程序的,mysql默认端口号就是3306

        ④java112这是我的一个数据库名字

        ⑤CharacterEncoding这个是指定字符编码为 utf8 ,也可以写成utf-8,两者相同

        ⑥useSSL=false这个是关闭加密

2)访问服务器的账户是啥

((MysqlDataSource) dataSource).setUser("root");

在数据库里面root默认为最高权限的用户,也就是超级管理员 ,当然这个也可以根据你自己的需求来写

3)访问服务器的密码是啥

((MysqlDataSource) dataSource).setPassword("123456");

这个密码就是当初装数据库时候设置的密码

进行到这一步只是完成了针对数据源对象进行初始化,并没有真正和数据库服务器进行任何网络通信,要想完成这一步请往下看

建立网络连接

Connection connection = dataSource.getConnection();

我们输入这一串代码,但是这里面有两个细节需要注意:

1.在输入dataSource.getConnection会报红线,这时候不要慌,把光标移动到报红线的地方,按住Alt+Enter,此时我们可以点击第一个抛出异常也可以选择第二个try-catch一下

2.我们在选择Connection的时候会出现两种,上面一种是JDBC API定义的一个接口,它代表数据库的连接,下面一种是MySQL特定的JDBC驱动程序中提供的一个类,但是在这里必须使用上面那一种,否则会出现问题

 这是以上全部代码

        DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("123456");//和数据库服务建立网络连接Connection connection = dataSource.getConnection();

到这一步就可以先运行一下,如果正常连接成功是不会报任何错误的,如果哪一步出现问题,那么报错信息也会给出具体提示的

构造sql语句并执行

首先我们可以看到原表的数据是这样的:

下面这段代码演示了通过java代码将数据写入MySQL数据库

String sql = "insert into user values(6,2077,'原神5区')";
PreparedStatement statement = connection.prepareStatement(sql);
int n = statement.executeUpdate();
System.out.println("执行语句:"+n+"条");
  1. PreparedStatement提供了预编译SQL语句的能力
  2. connection: 这是到数据库的连接对象
  3. prepareStatement(sql): 这是一个方法调用,作用是使用当前的数据库连接connection创建一个PreparedStatement对象。参数sql是一个包含占位符的SQL语句字符串

执行完上述语句可以看见数据表中的数据从5条变成了6条

executeUpdate()只针对DDL语句,执行后会返回一个整数,表示受影响的行数。

  • 对于INSERT语句,返回值表示插入了多少行数据。
  • 对于UPDATE语句,返回值表示有多少行数据被更新。
  • 对于DELETE语句,返回值表示有多少行数据被删除。

对于查询语句我们需要使用另一种,也就是executeQuery()

String sql = "select * from user";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
while(resultSet.next()){System.out.print(resultSet.getInt("id")+" ");System.out.print(resultSet.getInt("amount")+" ");System.out.println(resultSet.getString("accout"));
}

 但是上述写法可能会引起“sql注入攻击”,那么我们应该怎样改进呢?可以使用 ?来占位置,后续再替换掉,代码如下

        Scanner scanner = new Scanner(System.in);int id = scanner.nextInt();scanner.nextLine();//读取换行符int amount = scanner.nextInt();scanner.nextLine();//读取换行符String accout = scanner.nextLine();String sql = "insert into user values(?,?,?)";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1,id);statement.setInt(2,amount);statement.setString(3,accout);int n = statement.executeUpdate();

讲到这里已经可以简单正确的使用 java 代码来操作数据库了,后续还有其他升级版的操作请多关注

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

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

相关文章

Vue 邮箱登录界面

功能 模拟了纯前端的邮箱登录逻辑 还没有连接后端的发送邮件的服务 后续计划,再做一个邮箱、密码登录的界面 然后把这两个一块连接上后端 技术介绍 主要介绍绘制图形人机验证乃个 使用的是canvas,在源码里就有 界面控制主要就是用 表格、表单&#x…

SLF4J的介绍与使用(有logback和log4j2的具体实现案例)

目录 1.日志门面的介绍 常见的日志门面 : 常见的日志实现: 日志门面和日志实现的关系: 2.SLF4J 的介绍 业务场景(问题): SLF4J的作用 SLF4J 的基本介绍 日志框架的绑定(重点&#xff09…

GIT - 一条命令把项目更新到远程仓库

前言 阅读本文大概需要1分钟 说明 更新项目到远程仓库只需要执行一条命令,相当的简便 步骤 第一步 编辑配置文件 vim ~/.bash_profile第二步 写入配置文件 gsh() {local msg"${1:-ADD COMMIT PUSH}"git add . && git commit -m "$m…

elementUI 年份范围选择器实现

elementUI 不支持年份范围的选择器,依照下面的文章进行修改和完善 el-year-picker; element日期选择范围、选择年份范围_elemet 两个日期 选择的年份范围必须在三年之内-CSDN博客 el-year-picker 组件: 依赖包:moment 属性&…

Win11 Python3.10 安装pytorch3d

0,背景 Python3.10、cuda 11.7、pytorch 2.0.1 阅读【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程-CSDN博客 1,解决方法 本来想尝试,结果发现CUB安装配置对照表里没有cuda 11.7对应的版本,不敢轻举妄动&#x…

Web前端开发——HTML快速入门

HTML:控制网页的结构CSS:控制网页的表现 一、什么是HTML、CSS (1)HTML (HyperText Markup Languaqe:超文本标记语言) 超文本:超越了文本的限制,比普通文本更强大。除了…

Android 如何通过代码实时设置EditTextView光标

背景:换肤框架下,QA进行深色浅色切换说输入框光标颜色没有改变,转UI结果UI说需要修改!!!!! 本来有方法可以设置,但是 设置后未生效。重新进入该页面才生效!&a…

AcWing 1260:二叉树输出

【题目来源】https://www.acwing.com/problem/content/1262/【题目描述】 树的凹入表示法主要用于树的屏幕或打印输出,其表示的基本思想是兄弟间等长,一个结点的长度要不小于其子结点的长度。 二叉树也可以这样表示,假设叶结点的长度为 1&…

人工智能、机器学习、神经网络、深度学习和卷积神经网络的概念和关系

人工智能(Artificial Intelligence,缩写为AI)--又称为机器智能,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是智能学科重要的组成部分,它企图了解智能的实质…

[数据结构] --- 线性数据结构(数组/链表/栈/队列)

1 线性结构和非线性结构的理解 1.1 线性结构 线性结构是什么? 数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。线性结构是一个有序数据元素的集合。 线性结构特点: 线性结构有唯一的首元素(第一个元素&#…

服务器本地部署文件服务器minio

minio类似于阿里云的OSS,为不方便把图、文、日志等形式的文件保存在公有云上的,可以在自己的服务器上部署文件服务器 看过本人前几个文章的,使用docker就会很快上手部署,直接上所有代码 #添加镜像 docker search minio docker p…

Okhttp hostnameVerifier详解

hostnameVerifier 方法简介核心原理参考资料 方法简介 本篇博文以Okhttp 4.6.0来解析hostnameVerfier的作用,顾名思义,该方法的主要作用就是鉴定hostnname的合法性。Okhttp在初始化的时候我们可以自己配置hostnameVerfier: new OkHttpClien…

【做一道算一道】和为 K 的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2 示例 2: 输入:nums [1,2,3],…

(详细版)学生管理系统(姓名、成绩、学号)---顺序表

//1:创建顺序表 //2:判满 //3:判空 //4:插入学生信息 //5:输出学生信息 //6:按位置插入学生信息 //7:按位置删除学生信息 //8:按位置修改学生信息 //9:按学号查找学生信息 //10:顺序表去重 //11:销毁顺序表 main.c: int main(int argc, const char *argv[]) {seq_p…

Maven一键配置阿里云远程仓库,让你的项目依赖飞起来!

文章目录 引言一、为什么选择阿里云Maven仓库?二、如何设置Maven阿里云远程仓库?三、使用阿里云Maven仓库的注意事项总结 引言 在软件开发的世界里,Maven无疑是一个强大的项目管理工具,它能够帮助我们自动化构建、依赖管理和项目…

Flutter集成高德导航SDK(Android篇)(JAVA语法)

先上flutter doctor: flutter sdk版本为:3.19.4 引入依赖: 在app的build.gradle下,添加如下依赖: implementation com.amap.api:navi-3dmap:10.0.700_3dmap10.0.700navi-3dmap里面包含了定位功能,地图功能…

计数排序的实现

原理 对一个数组进行遍历,再创建一个count数组 每找到一个值则在count数组中对应的位置加一,再在count数组中找到数字上方的count值,count值为几,则打印几次数组中的值. 开空间 相对映射 排序的实现 void CountSort(int* a, i…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【明文导入密钥(C/C++)】

明文导入密钥(C/C) 以明文导入ECC密钥为例。具体的场景介绍及支持的算法规格 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 指定密钥别名keyAlias。 密钥别名的最大长度为64字节。 封装密钥属性集和密钥材料。通过[OH_Huks_I…

读人工智能全传05专家系统

1. 知识就是力量 1.1. 人工智能领域此前存在的问题是过度关注搜索和解决问题这种通用法则 1.2. “弱”方法缺少一个关键的要素,而这一要素才是在所有智能行为中起决定性作用的组成部分:知识 1.3. 一种基于知识的人工智能系统:专家系统开始…