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

news/2024/7/5 2:36:41

 

目录

前后端联调(传输文件) 

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路径的时候就会找不到要访问的数据,如下:

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


http://lihuaxi.xjx100.cn/news/1888257.html

相关文章

亚马逊鲲鹏系统:防关联技术守护您的账户安全

亚马逊买家账号注册是一项相当简便的操作&#xff0c;但当涉及到批量注册时&#xff0c;我们就需要更加注意防关联的问题。对于那些对此领域不够熟悉的朋友们&#xff0c;可以使用亚马逊鲲鹏系统&#xff0c;这款系统能够为我们提供一站式的解决方案。该系统不仅支持买家账号的…

session超时详解

session超时详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 揭秘Session超时&#xff1a;让你的Web应用更智能 作为Web开发者&#xff0c;我们经常听到关于S…

基于pandoraNext使用chatgpt4

1.登陆GitHub 获取pandoraNext项目GitHub - pandora-next/deploy: Pandora Cloud Pandora Server Shared Chat BackendAPI Proxy Chat2API Signup Free PandoraNext. New GPTs(Gizmo) UI, All in one! 在release中选择相应版本操作系统的安装包进行下载 2.获取license_…

【Linux】:线程(二)互斥

互斥与同步 一.线程的局部存储二.线程的分离三.互斥1.一些概念2.上锁3.锁的原理4.死锁 一.线程的局部存储 例子 可以看到全局变量是所有线程共享的&#xff0c;如果我们想要每个线程都单独访问g_val怎么办呢&#xff1f;其实我们可以在它前面加上__thread修饰。 这就相当于把g…

Vue学习计划-Vue2--VueCLi(四)组件传值和自定义事件

1. 组件传值 组件化编码流程&#xff1a; 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; 一个组件在用&#xff0c…

LeeCode刷题

寻找数组的中心下标 给定一个整数nums&#xff0c;请编写一个能够返回数组“中心下标”的方法 中心下标是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心下标&#xff0c;返回-1.如果数组右多个中心下标&#xff0c;应该返回…

飞天使-docker知识点1-安装docker以及手动制作镜像

文章目录 docker 的好处安装dockerdocker imagesimages 导出与导出删除镜像,指定端口启用容器启停批量关闭正在运行的容器 docker 的镜像制作之下载并安装好nginxdocker 的镜像制作之提交镜像 docker 的好处 快速部署&#xff1a;短时间内可以部署成百上千个应用&#xff0c;更…

K8S(一)—安装部署

目录 安装部署前提以下的操作指导(在master)之前都是三台机器都需要执行 安装docker服务下面的操作仅在k8smaster执行 安装部署 前提 以下的操作指导(在master)之前都是三台机器都需要执行 关闭防火墙 [rootk8smaster ~]# vim /etc/selinux/config [rootk8smaster ~]# swa…