写了一个简单的插入语句,但是一直报错:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')values( 'hello' at line 11 ### The error may exist in file [D:\mes-master\mes-master\ruoyi-system\target\classes\mapper\system\pnMapperRuKu.xml] ### The error may involve com.ruoyi.system.mapper.pnMapperRuKu.insertPnAssertRukuDetails-Inline ### The error occurred while setting parameters ### SQL: insert into pnAssertRukuDetails ( storageRoom, )values( ?, ) ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')values( 'hello' at line 11 ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')values( 'hello' at line 11
调用方法:
@Override
public int insertPnCode(PnModelInOutInventory pnModelInOutInventory) {
// pnMapperRuKu.insertPnAssertRuku(pnModelInOutInventory);
return pnMapperRuKu.insertPnAssertRukuDetails(pnModelInOutInventory);
}
mapper.xml----
<insert id="insertPnAssertRukuDetails" parameterType="com.ruoyi.system.domain.PnModelInOutInventory">
insert into pnAssertRukuDetails (
<if test="parentPnAssertRukuId != null and parentPnAssertRukuId != '' ">parent_pnAssertRuku_id,</if>
<if test="materialInformation != null and materialInformation != '' ">materialInformation,</if>
<if test="numbersRuKu != null and numbersRuKu != '' ">numbersRuKu,</if>
<if test="qualified != null and qualified != '' ">qualified,</if>
<if test="unit != null and unit != '' ">unit,</if>
<if test="storageRoom != null and storageRoom != ''">storageRoom,</if>
<if test="sn != null and sn != ''">sn,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="batchNumber != null and batchNumber != ''">batchNumber,</if>
)values(
<if test="parentPnAssertRukuId != null and parentPnAssertRukuId != '' ">#{parentPnAssertRukuId},</if>
<if test="materialInformation != null and materialInformation != '' ">#{materialInformation},</if>
<if test="numbersRuKu != null and numbersRuKu != '' ">#{numbersRuKu},</if>
<if test="qualified != null and qualified != '' ">#{qualified},</if>
<if test="unit != null and unit != '' ">#{unit},</if>
<if test="storageRoom != null and storageRoom != ''">#{storageRoom},</if>
<if test="sn != null and sn != ''">#{sn},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="batchNumber != null and batchNumber != ''">#{batchNumber},</if>
)
</insert>
我对比了Mapper.xml中的语法,包括调整英文符号,调整英文的括号;都没有作用;
有么有大佬帮忙看下,问题出在哪里??
问题点在于: 类似如下示例SQL
name后面的 --> ,
<--
insert newschema.new_table (name,) values ('hello',);
问题出在你的 SQL 插入语句中,特别是在字段列表和值列表的结尾处。由于你使用了 <if>
标签来动态添加字段和值,如果所有的 <if>
条件都不满足(即所有字段都为空或未设置),那么 SQL 语句的字段列表和值列表的末尾将会包含多余的逗号,这会导致 SQL 语法错误。
为了解决这个问题,你可以使用 MyBatis 的 <trim>
标签来自动去除多余的逗号和可能的空白。<trim>
标签提供了 prefix
、suffix
、prefixOverrides
和 suffixOverrides
属性,可以帮助你更好地控制 SQL 语句的生成。
下面是修改后的 mapper.xml
中的 <insert>
语句:
<insert id="insertPnAssertRukuDetails" parameterType="com.ruoyi.system.domain.PnModelInOutInventory">
INSERT INTO pnAssertRukuDetails
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="parentPnAssertRukuId != null and parentPnAssertRukuId != ''">parent_pnAssertRuku_id,</if>
<if test="materialInformation != null and materialInformation != ''">materialInformation,</if>
<if test="numbersRuKu != null and numbersRuKu != ''">numbersRuKu,</if>
<if test="qualified != null and qualified != ''">qualified,</if>
<if test="unit != null and unit != ''">unit,</if>
<if test="storageRoom != null and storageRoom != ''">storageRoom,</if>
<if test="sn != null and sn != ''">sn,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="batchNumber != null and batchNumber != ''">batchNumber,</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="parentPnAssertRukuId != null and parentPnAssertRukuId != ''">#{parentPnAssertRukuId},</if>
<if test="materialInformation != null and materialInformation != ''">#{materialInformation},</if>
<if test="numbersRuKu != null and numbersRuKu != ''">#{numbersRuKu},</if>
<if test="qualified != null and qualified != ''">#{qualified},</if>
<if test="unit != null and unit != ''">#{unit},</if>
<if test="storageRoom != null and storageRoom != ''">#{storageRoom},</if>
<if test="sn != null and sn != ''">#{sn},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="batchNumber != null and batchNumber != ''">#{batchNumber},</if>
</trim>
</insert>
这里,<trim>
标签的 prefix
和 suffix
属性分别用于在字段列表和值列表的开头和结尾添加括号。suffixOverrides=","
属性则用于去除字段列表和值列表末尾的逗号。这样,无论哪些 <if>
条件满足,生成的 SQL 语句都会是正确的。
我的问题:三个线程的ID分别是A,B,C;,每个线程将自己的ID值在屏幕上打印5遍,打印顺序是ABCABC。 我编写的代码: 但是出现了错误 哪个地方出现了问题呢?
问题内容: 这可以返回一个整数列表: 但是,如果我想让调用者指定通用类型怎么办?像这样的东西,尽管在语法上我不确定如何去做: 用法是: 问题答案: 关于参数化类型的通用工厂方法 看来您想编写方便的工厂方法来实例化通用集合。 您可以编写如下通用方法: 然后,您可以简单地编写: 请注意,在某些情况下,上述方法不必须的,你可以选择离开了实施的名字出来的方法和只使用名称(例如,)。 有效Java 2nd
问题内容: 嗨,我在Grid视图中的android文档中遇到了以下代码。 在此 < ?>(作为stackoverflow添加的空间不允许没有空间)指示/做什么? 问题答案: <?>是通用类型的通配符,这意味着AdapterView的通用类型可以是任何东西。 更具体地说,在这种情况下,方法上的参数可能会接收带有绝对任何泛型类型的AdapterView。请注意,如果您想限制泛型类型,可以执行以下操作:
问题内容: 这是我的解释,它是类模板,但是类?表示该类的名称不确定,并且扩展了Something类。 如果我的解释有问题,请告诉我。 问题答案: 你说的差不多。基本上,Java没有模板的概念(C ++有)。这称为泛型。这就定义了一个通用类,其通用属性是的任何子类。 如果您想了解模板和泛型之间的区别,建议阅读“ C++和Java中“泛型”类型之间有什么区别? ”。
最近我在查看http://winterbe.com/posts/2015/04/07/java8-concurrency-tutorial-thread-executor-examples/tutorial,他使用了以下语法。
如果我想用java编写而不是按常规编写的话,如何在BPMN Gateway diverge约束中使用varaible myTicket:(m:Ticket(status==Ticket.create))。