Java连接数据库的各种细节错误(细节篇)

 

目录

前后端联调(传输文件) 

ClassNotFoundException:

SQLException:

SQL语法错误:

数据库连接问题:

驱动问题:

资源泄露:

并发问题:

超时问题:

其他库冲突:

配置问题:

网络问题:

SSL/TLS问题:

数据库权限问题:

驱动不兼容:

其他未知错误:

1.变量名不一致出错:

2.浏览器访问或者postman测试的时候的URL路径问题:


前后端联调(传输文件) 

先讲点别的,在接收客户端传过来的数据时,如果是一个文件怎么接收并返回,以及返回的文件大小,多个文件大小:

<body>

    <form action="/upload" method="post" enctype="multipart/form-data">
        姓名: <input type="text" name="username"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="image"><br>
        <input type="submit" value="提交">
    </form>

</body>

做事情之前不得先有一个客户端页面吗铁子。

有了之后,在建立Java连接的时候就要和上面form表单里面的三个属性有关系了,

action就是请求路径,

method就是请求方式

enctypr是上传的文件,默认值是只上传文件名,上面的是文件内容一起上传

设置好了之后要创建一个coneroller类来接收数据和返回数据:

 然后就需要把传进来的临时文件加载到本机,或者别的地方,这里就加载到本机:

import com.zaizai.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
public class UploadConeroller {

    //接收表单项
    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("接收的表单项:{},{},{}",username,age,image);

        UUID uuid = UUID.randomUUID();

        String originalFilename = image.getOriginalFilename();

        int index = originalFilename.lastIndexOf(".");
        String substring = originalFilename.substring(index);
        String newFileName=uuid+substring;


        image.transferTo(new File("D:\\Java-Html文件转存路径\\"+newFileName));
        return Result.success();
    }

}

  1. String originalFilename = image.getOriginalFilename();

这行代码从image对象中获取其原始文件名,并将其存储在originalFilename字符串变量中。
2. int index = originalFilename.lastIndexOf(".");

这行代码查找originalFilename字符串中最后一个.字符的位置。.通常用于表示文件扩展名,例如在文件名"example.jpg"中,.分隔了"example"和"jpg"。lastIndexOf方法返回这个.字符的索引值。如果originalFilename不包含.字符,那么此方法将返回-1。
3. String substring = originalFilename.substring(index);

这行代码使用之前找到的索引值(即最后一个.的位置)来从originalFilename中提取子字符串。这意味着它将获取原始文件名的扩展名部分。例如,如果originalFilename是"example.jpg",那么substring将是"jpg"。

总之,这段代码的主要目的是从给定的图像文件的原始文件名中提取文件的扩展名。

然后image调用方法transferTo把文件存到对应的的位置即可;

在Java中连接数据库时,可能会遇到各种错误。以下是一些常见的错误及其解决方法(下面其他错误里面有一些和容易被遗忘的,忽视的!!!)

  1. ClassNotFoundException:

    • 当你尝试加载一个类时,如果JVM找不到该类,就会抛出此异常。
    • 解决方法:确保已将JDBC驱动的JAR文件添加到项目的类路径中。
  2. SQLException:

    • 这是与数据库交互时最常见的异常。
    • 解决方法:检查URL、用户名、密码等连接参数是否正确。确保数据库正在运行,并且网络连接正常。
  3. SQL语法错误:

    • 如果SQL查询中的语法有误,你可能会收到一个语法错误。
    • 解决方法:仔细检查SQL查询,并使用在线SQL验证工具来帮助识别任何语法错误。
  4. 数据库连接问题:

    • 确保数据库服务器正在运行,并且可以从你的应用服务器访问它。
    • 解决方法:检查数据库服务器的状态,并确保网络连接正常。
  5. 驱动问题:

    • 如果你使用的是较旧的JDBC驱动,可能会遇到与新版本的数据库不兼容的问题。
    • 解决方法:确保你使用的JDBC驱动与你的数据库版本兼容。考虑使用JDBC 4.x或更高版本。
  6. 资源泄露:

    • 如果不正确地关闭数据库连接或ResultSet,可能会导致资源泄露。
    • 解决方法:确保在使用完数据库连接和ResultSet后正确关闭它们。使用try-with-resources结构可以自动管理资源。
  7. 并发问题:

    • 如果多个线程尝试同时访问同一数据库连接,可能会遇到并发问题。
    • 解决方法:为每个线程创建新的数据库连接,或者使用连接池来管理连接。
  8. 超时问题:

    • 如果数据库响应时间过长,可能会遇到超时问题。
    • 解决方法:增加连接的超时时间或优化查询以减少响应时间。
  9. 其他库冲突:

    • 如果项目中有其他库也使用了相同的JDBC驱动或依赖关系,可能会出现冲突。
    • 解决方法:确保所有库都使用相同版本的JDBC驱动,并考虑将JDBC驱动作为项目的依赖项进行管理。
  10. 配置问题:

  • 如果数据库的配置(例如端口、主机名等)不正确,可能会导致连接失败。
  • 解决方法:仔细检查数据库的配置信息,并确保它们与你的应用程序的设置匹配。
  1. 网络问题:

  • 如果应用程序和数据库服务器之间的网络出现问题,可能会导致连接失败。
  • 解决方法:检查网络连接,并确保防火墙设置不会阻止应用程序和数据库之间的通信。
  1. SSL/TLS问题:

  • 如果数据库需要安全连接(例如使用SSL/TLS),并且配置不正确,可能会导致连接失败。
  • 解决方法:确保SSL/TLS证书和密钥配置正确,并考虑使用专门的工具来测试SSL/TLS连接。
  1. 数据库权限问题:

  • 如果提供的用户名和密码没有足够的权限来访问数据库或执行查询,可能会导致错误。
  • 解决方法:确保提供的用户名和密码具有正确的权限设置,并考虑与数据库管理员合作来解决问题。
  1. 驱动不兼容:

  • 有时,JDBC驱动与特定的Java版本或操作系统不兼容,可能导致错误。
  • 解决方法:检查JDBC驱动的文档和兼容性要求,并确保它们与你的Java版本和操作系统兼容。
  1. 其他未知错误:

1.变量名不一致出错:

由于数据库里面的变量是用下划线分割,Java里面是驼峰命名法,如果直接把数据库变量复制到里面的话,不符合Java变量命名规范,测试数据的时候会报错,例如:

 解决方法图里面已经说了。

2.浏览器访问或者postman测试的时候的URL路径问题:

Java为了不重复重写一样的代码,优化代码量,提供了一个注解,可以一次性给相同的URL提取出来,用的时候只用写后面不一样的即可,但是这样如果忘了修改或者多写了一遍,呢么览器访问或者postman测试的时候的URL路径的时候就会找不到要访问的数据,如下:

 只用写不一样的部分不一样的不过分:

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

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

相关文章

祝贺!2023美丽汉字小达人市级比赛和区级自由报名获奖名单发布

昨天&#xff0c;汉字小达人的主办方《中文自修》杂志社在官网发布了两个公示&#xff1a;《“中文自修杯”第十届上海市小学生“美丽汉字小达人”市级活动获奖名单公示》、《“中文自修杯”第十届上海市小学生“美丽汉字小达人”区级活动“自由报名”获奖名单公示》。 这两份名…

在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Windows》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

SCA面面观 | 五大维度提升,让SCA产品走向成熟

随着开源软件的迅速崛起&#xff0c;特别是在2021年SolarWinds和Log4j漏洞事件引发全球关注后&#xff0c;软件成分分析&#xff08;Software Composition Analysis&#xff0c;简称SCA&#xff09;越来越受到业界的重视。SCA产品已经逐渐成为企业软件供应链资产管理、漏洞管理…

【UE 材质】切换颜色、纹理时的过渡效果

效果 步骤 1. 新建一个工程&#xff0c;创建Basic关卡 2. 创建一个材质&#xff0c;这里命名为“M_Plane”&#xff0c;打开这个材质&#xff0c;在材质图表中添加如下节点 注意“Noise”节点中的函数选择“Voronoi” 3. 对材质“M_Plane”创建材质实例 4. 在场景中放置一个平…

Java_Mybatis_缓存

缓存 1.概述 Mybatis 缓存&#xff1a;MyBatis 内置了一个强大的事务性查询缓存机制&#xff0c;它可以非常方便地配置和定制 2.会话缓存&#xff08;一级缓存&#xff09; sqlSession 级别的&#xff0c;也就是说&#xff0c;使用同一个 sqlSession 查询同一 sql 时&#x…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

Vue指令之v-on

v-on指令用于注册事件&#xff0c;作用是添加监听与提供事件触发后对应的处理函数。 v-on有两种语法&#xff0c;在提供处理函数的时候既可以直接使用内联语句&#xff0c;也可以提供函数的名字。 第一种语法是直接提供内联语句&#xff0c;如下 v-on:事件名 "内联语句…

外贸SOHO建站教程?海洋建站推广如何做?

外贸SOHO建站推广的步骤&#xff1f;国际贸易网站建设方法&#xff1f; 随着互联网的普及和发展&#xff0c;越来越多的外贸SOHO从业者选择通过建立自己的网站来拓展业务。那么&#xff0c;如何搭建一个专业、高效的外贸网站呢&#xff1f;海洋建站将为您提供一份详细的外贸SO…

Java - Bean的生命周期

Bean的生命周期之5步 Bean生命周期的管理&#xff0c;可以参考Spring的源码&#xff1a;AbstractAutowireCapableBeanFactory类的doCreateBean()方法。 Bean生命周期可以粗略的划分为五大步&#xff1a; 第一步&#xff1a;实例化Bean 第二步&#xff1a;Bean属性赋值 第三…

扫描电镜(SEM)样品在进行扫描电镜观察前需要进行哪些处理

对于扫描电镜&#xff08;Scanning Electron Microscope&#xff0c;SEM&#xff09;样品的制备&#xff0c;需要经过一系列处理步骤以确保样品表面的干净、导电性好&#xff0c;并且能够提供高质量的显微图像。以下是一些常见的处理步骤&#xff1a; 1. 固定样品&#xff08;…

Vue 学习随笔系列七 -- 表单动态生成

表单动态生成 文章目录 表单动态生成1、动态表单组件封装2、组件引用3、实现效果 1、动态表单组件封装 <!-- 动态生成下拉框&#xff0c;可同理生成input框等 --> <template><el-dialogcustom-class"custom-dialog":title"dialogTitle":vi…

Linux 使用定时任务

在Linux中&#xff0c;你可以使用cron&#xff08;定时任务管理器&#xff09;来设置和管理定时任务。以下是使用cron的基本步骤 编辑定时任务列表 打开终端&#xff0c;输入以下命令来编辑当前用户的定时任务列表 crontab -e如果是要编辑系统范围的定时任务&#xff0c;可以…

如何在忘记密码的情况下恢复解锁 iPhone

您忘记了 iPhone 密码吗&#xff1f;Apple 官方通常建议将 iPhone 恢复至出厂设置以将其删除。这种修复很不方便&#xff0c;甚至可能比问题本身更麻烦。 如果您也经历过同样的情况&#xff0c;并且想知道忘记了 iPhone 密码并且不想恢复它该怎么办&#xff0c;我们的终极指南…

docker基本管理和docker相关概念

docker是开源的的应用容器引擎&#xff0c;基于go语言开发的&#xff0c;运行在linux系统当中的开源的轻量级的"虚拟机。 docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的&#xff0c;可以移植的&#xff0c;自给自足的容器 docker的宿主机是linux系…

ElementPlus table 中嵌套 input 输入框

文章目录 需求分析 需求 vue3 项目中 使用UI组件库 ElementPlus 时&#xff0c;table 中嵌入 input输入框 分析 <template><div class"p-10"><el-table :data"tableData" border><el-table-column prop"date" label&qu…

jemeter,http cookie管理器

Http Cookie管理器自动实现Cookie关联的原理&#xff1a; (默认:作用域在同级别的组件) 一:当Jmeter第1次请求服务器的时候,如果说服务器有通过响应头的Set-Cookie有返回Cookie,那么Http Cookie管理器就会自动的保存这些Cookie的值。 二&#xff1a;当Jmeter第2-N次请求服务器的…

【同步FIFO_2023.12.13】

同步fifo&#xff0c;写时钟和读时钟为同一个时钟&#xff0c;用于交互数据缓冲 fifo的深度&#xff1a;同一块数据内存的大小 reg [2:0] Mem [8];//宽度3&#xff0c;深度8典型同步fifo的三部分 fifo写控制逻辑&#xff1a;写地址、写有效信号&#xff0c;fifo写满、写错等状…

ArkUI组件

目录 一、概述 声明式UI 应用模型 二、常用组件 1、Image&#xff1a;图片展示组件 示例 配置控制授权申请 2、Text&#xff1a;文本显示组件 示例 3、TextInput&#xff1a;文本输入组件 示例 4、Button&#xff1a;按钮组件 5、Slider&#xff1a;滑动条组件 …

Navicat 技术指引 | 适用于 GaussDB 分布式的数据查看器

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

【Git 小妙招】一文快速上手 Git 基本操作(两万字图文讲解)

文章目录 前言1. 创建 Git 本地仓库2. 配置 Git3. 认识工作区, 暂存区, 版本库3.1 添加文件(场景一)3.2 查看 .git 文件3.3 添加文件(场景二) 4. 修改文件5. 版本回退6. 撤销修改6.1 对于工作区的代码&#xff0c;还没有 add(场景一)6.2 已经 add &#xff0c;但没有 commit(场…