【问题标题】:Truncated incorrect INTEGER value: '%' in Java and MySQL截断不正确的 INTEGER 值:Java 和 MySQL 中的“%”
【发布时间】:2017-05-05 11:33:01
【问题描述】:

我使用Java和MySQL按名称搜索,之前我连接到Oracle并且一切运行良好,现在我更改为迁移到MYSQL并看到错误..

MySql:

SELECT  CAR.ID AS ID, 
    CAR.NAME AS NAME, 
    CAT.ID AS CATEGORY_ID, 
    CAT.NAME AS CATEGORY_NAME,
    C.ID AS CITY_ID,
    C.NAME AS CITY_NAME,
FROM    CARS CAR,       
    CATEGORY CAT,
    CITY C
WHERE   LOWER(CAR.NAME) LIKE '%'||LOWER(?)||'%' 
    AND CAR.CATEGORY_ID         = CAT.ID  
    AND D.CITY_ID               = C.ID
ORDER BY CAT.NAME, CAR.NAME

在部署和调试搜索查询时,发生错误:

日志消息:

SqlExceptionHelper - SQL Error: 1114, SQLState: HY000
SqlExceptionHelper - The table 'C:\Windows\TEMP\#sql730_a_47' is full
HibernateUtils - error at HibernateUtils.getListResult: could not extract    ResultSet
SqlExceptionHelper - SQL Warning Code: 1292, SQLState: HY000
SqlExceptionHelper - Truncated incorrect INTEGER value: '%'
SqlExceptionHelper - SQL Warning Code: 1114, SQLState: HY000
SqlExceptionHelper - The table 'C:\Windows\TEMP\#sql730_a_47' is full

MySQL 说:

#1064 - 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 '?)||'%'
    AND CAR.CATEGORY_ID         = CAT.ID at line 50 

我该如何解决这个问题?非常感谢

【问题讨论】:

  • 您需要使用 concat 进行连接 plz remove ||
  • 你的代码循环怎么样?
  • 请注意:我删除了 Oracle 和 PL/SQL 标记。该错误是 MySQL 错误,因此代码显然是 MySQL 代码。
  • @GordonLinoff:是的,我明白了,这是我的语法错误 mysql,我正在测试它..

标签: java mysql sql hibernate


【解决方案1】:

您的问题(最初)被标记为 MySQL 和 Oracle。问题本身和错误强烈表明 MySQL 是数据库(例如,Oracle 不会产生 MySQL 错误)。

MySQL 不使用|| 进行字符串连接。编写查询的正确方法是:

SELECT CAR.ID AS ID, CAR.NAME AS NAME, CAT.ID AS CATEGORY_ID, 
       CAT.NAME AS CATEGORY_NAME, C.ID AS CITY_ID, C.NAME AS CITY_NAME,
FROM CARS CAR JOIN      
     CATEGORY CAT
     ON CAR.CATEGORY_ID = CAT.ID JOIN
     CITY C
     ON D.CITY_ID = C.ID
WHERE LOWER(CAR.NAME) LIKE CONCAT('%', LOWER(?), '%')
ORDER BY CAT.NAME, CAR.NAME;

还要注意JOIN语法的正确使用。

【讨论】:

    【解决方案2】:

    而不是:

    LIKE '%'||LOWER(?)||'%' 
    

    你可以使用:

    "...LIKE LOWER('%"+ str.toLowerCase() +"%')"
    

    或者:

    Query query = "...LIKE LOWER('%?%')";
    query.setParameter(1, str.toLowerCase());
    

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多