【问题标题】:jpa date nativequery sql serverjpa date nativequery sql server
【发布时间】:2014-07-16 19:03:24
【问题描述】:

我正在使用 jpa 和 sql server 2008 开发一些东西,但出现以下错误

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting date and/or time from character string.
Error Code: 241

Call: SELECT TOP 100 * FROM [database].[dbo].[registro] WHERE (indate between 'Wed Apr 30 01:01:01 COT 2014' and 'Mon May 12 01:01:01 COT 2014') or name like '%and%'
Query: ReadAllQuery(referenceClass=Register sql="SELECT TOP 100 * FROM [database].[dbo].[register] WHERE (indate between 'Wed Apr 30 01:01:01 COT 2014' and 'Mon May 12 01:01:01 COT 2014') or name like '%and%'")

jpa 查询:

Query query = em.createNativeQuery("SELECT TOP 100 * FROM [database].[dbo].[register] WHERE (indate between '"+idate+"' and '"+fdate+"') or name like '%"+name+"%'",Register.class);

谁能告诉我要更改什么或更好的查询方法。

【问题讨论】:

    标签: sql-server-2008 jpa nativequery


    【解决方案1】:

    您不应该在本机查询中使用日期字符串。

    您还必须避免使用sql injection,使用setParemeter

    以下查询应该可以工作:

    String query = "SELECT TOP 100 * FROM [database].[dbo].[register] WHERE (indate between ? and  ?);"
    
    Query query = em.createNativeQuery(query).setParameter(1,[your-date- value],TemporalType.DATE).setParameter(2,[your second-date-value],TemporalType.DATE);
    
    List<Register> registerList = query.getResultList();
    

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2019-01-27
      • 2018-05-20
      • 1970-01-01
      • 2021-01-24
      • 2014-02-15
      • 1970-01-01
      相关资源
      最近更新 更多