You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java连接MariaDB插入文件路径报MySQLSyntaxErrorException如何解决

问题产生原因
  • 拼接SQL时,字符串类型的字段值没有用单引号包裹:拼接后的SQL语句为INSERT INTO stage1 (ATTESTATION) VALUES (D:\\wallpaper\\a.jpg),MariaDB会把D:识别为数据库标识符而非字符串值,直接触发语法错误。
  • 手动转义特殊字符不可靠:自行替换反斜杠的处理方式不仅容易遗漏转义规则,还存在SQL注入风险。
  • PreparedStatement API使用错误:已创建预编译对象的前提下,仍将SQL语句作为参数传入executeUpdate方法,等于直接绕过了预编译的特殊字符处理逻辑,等价于使用普通Statement执行拼接SQL。
修复方案

使用PreparedStatement原生的占位符机制处理参数,无需手动拼接SQL、手动转义特殊字符,修正后的代码如下:

try {
    JFileChooser f = new JFileChooser("D:\\");
    f.showOpenDialog(null);
    FileNameExtensionFilter fnef = new FileNameExtensionFilter("IMAGES", "png", "jpg", "jpeg");
    f.setFileFilter(fnef);
    File selected = f.getSelectedFile();
    String selectedPath = selected.getAbsolutePath();

    ImageIcon icon = new ImageIcon(selectedPath);
    Image image = icon.getImage();

    // 使用?作为参数占位符,不需要手动拼接值
    String sql = "INSERT INTO stage1 (ATTESTATION) VALUES (?)";
    pst = cnx.prepareStatement(sql);
    // 给占位符赋值,预编译会自动处理特殊字符转义
    pst.setString(1, selectedPath);
    // 调用无参executeUpdate,不要传入sql参数
    pst.executeUpdate();
    JOptionPane.showMessageDialog(null, "succes!!");
} catch (SQLException ex) {
    ex.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Nabil Lacost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 07:24:05