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

发布时间:2023年12月18日

?

目录

前后端联调(传输文件)?

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

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

文章来源:https://blog.csdn.net/m0_71149935/article/details/134970750
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。