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

使用Sql2o向MariaDB插入数据报SQL语法错误该如何解决?

错误原因

  • 你的INSERT语句中使用的desc、condition都是MariaDB的保留关键字,直接作为普通字段名使用会触发SQL语法解析错误,这和报错信息中提示的语法错误位置完全吻合。

修复方案

方案1:保留字段名,给关键字加反引号包裹(无需修改表结构和实体类,改造成本最低)

仅修改SQL语句,将desc和condition两个字段用反引号`包裹,修正后的代码如下:

public static void add(Product product, HttpServletRequest request) {
        final String sql = "insert into product (item_code, name, unit_price, units_in_stock, `desc`, manufacturer, category, `condition`) " +
                "values (:item_code,:name,:unit_price,:units_in_stock,:desc,:manufacturer,:category,:condition)\n";
        try (Connection con = sql2o.open()) {
            con.createQuery(sql).addParameter("item_code", product.getItem_code())
                    .addParameter("name", product.getName())
                    .addParameter("unit_price", product.getUnit_price())
                    .addParameter("units_in_stock", product.getUnits_in_stock())
                    .addParameter("desc", product.getDesc())
                    .addParameter("manufacturer", product.getManufacturer())
                    .addParameter("category", product.getCategory())
                    .addParameter("condition", product.getCondition())
                    .executeUpdate();
        }
}

方案2:修改字段名避免关键字冲突(彻底解决后续隐患)

将数据库表中desc改为description、condition改为product_condition这类非保留关键字的名称,同步修改实体类对应属性、SQL语句中的字段名和参数名即可,后续不会再出现同类关键字冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:12:04