数据库插入前检查文件是否已上传的代码问题排查
问题根源分析
哦,我一眼就看出问题所在了——你的代码根本没真正去数据库里查询文件名!你把fileNameDB赋值成了一条SQL语句的字符串,然后直接拿这个字符串和用户选择的文件名做对比,这俩肯定永远不相等啊,自然就直接跳过错误提示执行插入逻辑了。
修正方案
要实现文件存在性校验,你得真正执行这条SQL查询,从数据库里读出已存在的文件名再做对比。下面是完整的修正思路和代码示例:
核心步骤说明
- 先通过JDBC建立好数据库连接(假设你已经有现成的连接对象或工具类)
- 用
PreparedStatement执行查询(比普通Statement更安全,能防SQL注入) - 遍历查询结果集,判断是否有匹配的文件名
- 根据校验结果决定弹出错误还是执行插入
修正后的代码示例
String filename = fileopen.getSelectedFile().getName(); boolean fileExists = false; // 优化SQL:直接按目标文件名查询,比查全表效率高得多 String checkSql = "select File_name from dbo.Table where File_name = ?"; // 用try-with-resources自动关闭资源,避免泄漏 try (PreparedStatement pstmt = yourDbConnection.prepareStatement(checkSql)) { pstmt.setString(1, filename); // 设置查询参数 try (ResultSet rs = pstmt.executeQuery()) { // 结果集有数据,说明文件已存在 if (rs.next()) { fileExists = true; } } } catch (SQLException e) { // 处理数据库查询异常,给用户提示或打印日志 JOptionPane.showMessageDialog(null, "查询数据库出错: " + e.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } if (fileExists) { JOptionPane.showMessageDialog(null, "File exists", "ERROR", JOptionPane.ERROR_MESSAGE); } else { // 这里执行你的插入逻辑 // 同样建议用PreparedStatement执行插入,避免SQL注入 }
额外优化提示
- 原代码查询全表再在Java层对比的方式效率极低,改成带
where条件的查询,数据库能快速定位结果,尤其适合数据量大的表。 - 一定要避免直接拼接SQL字符串的写法,用
PreparedStatement绑定参数更安全。 - 记得处理数据库操作可能抛出的异常,不然程序容易崩溃还找不到原因。
内容的提问来源于stack exchange,提问作者n0rek
相关产品推荐
相关产品推荐

