【问题标题】:number of select types did not match || unparseable date "Tue Jan 15 00:00:00 SGT 2013"选择类型的数量不匹配 ||无法解析的日期“Tue Jan 15 00:00:00 SGT 2013”
【发布时间】:2020-08-31 11:50:29
【问题描述】:

我遇到了一个错误,我不确定为什么选择类型的数量与插入的数量不匹配。 我有请求实体,有 3 个值。计费周期、开始日期和结束日期。 我尝试在插入时添加 0,但仍然不起作用。

更新:我的日期是字符串。它应该是日期类型。我将 SELECT 更改为 VALUES。 我得到了新的错误: 无法解析的日期:“Tue Jan 15 00:00:00 SGT 2013”​​

我的插入方法

    @Override
    @Transactional
    public void insertRequest(Request request) {
    
     try {
    DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd" );
    DateFormat inputFormat = new SimpleDateFormat("E MMM dd HH:mm:ss Z 
    yyyy");
    Date sdate = outputFormat.parse(request.getStart_date()) ;
    Date edate= outputFormat.parse(request.getEnd_date()) ;
    
    String sqlQuery;
    
        sqlQuery = "INSERT INTO Request "
                + "(billing_cycle, start_date, end_date) VALUES ("
                +  
                + request.getBilling_cycle() +", "
                + "'"+ sdate +"', "
                + "'"+ edate+"')";
        Query query = entityManager.createQuery(sqlQuery);
        query.executeUpdate();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   

我的价值观

{
    "billing_cycle":"1", 
    "start_date":"Tue Jan 15 00:00:00 SGT 2013", 
    "end_date":"Thu Feb 14 00:00:00 SGT 2013"
}

我的实体

@Entity
@Table(name="request")
public class Request {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="request_id")
    private int request_id;

    @Column(name="billing_cycle")
    private int billing_cycle;

    @Column(name="start_date", columnDefinition="Date")
    private String start_date;

    @Column(name="end_date", columnDefinition="Date")
    private String end_date;

错误:

Unparseable date: "Tue Jan 15 00:00:00 SGT 2013"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)

结构数据库:

【问题讨论】:

  • 请将您的代码和堆栈跟踪添加为文本。
  • 我更新了,请检查
  • createQuery 方法用于创建JPQL 查询,我认为它不支持INSERT 语句。还有为什么在 Request 对象已经可用时需要使用 INSERT 语句。可以试试entityManager.persist(request)

标签: json spring hibernate web hql


【解决方案1】:

在您的 request_id 属性的定义中,我看到您选择了 GENERATION.AUTO 策略。因此,在您的插入请求中,您应该将其设为 null。

另一方面,如果您要使用简单的 sql 查询,我不了解实体的兴趣。 你可以像这样持久化你的对象:

entityManager.persist(request);

在您的数据库架构中,您使用的是 DATE。在这里你会发现 DATE 和 DATETIME 的区别

DATE:用于带有日期部分但没有时间部分的值。 MySQL 以 YYYY-MM-DD 格式检索和显示 DATE 值。支持的范围是 1000-01-01 到 9999-12-31。

DATETIME:用于同时包含日期和时间部分的值。 MySQL 以 YYYY-MM-DD HH:MM:SS 格式检索和显示 DATETIME 值。支持的范围是 1000-01-01 00:00:00 到 9999-12-31 23:59:59。

【讨论】:

  • 它仍然无法正常工作:选择类型的数量与 insert [INSERT INTO Request (request_id, billing_cycle, start_date, end_date) select (null, 1, '2013-01-15', '2013-02-14')
  • 通常情况下,插入请求中的选择应该使用这样的表: INSERT INTO TABLE1(COL1, COL2, COL3) SELECT COL1, COL2, COL3 FROM TABLE2;在您的情况下,您应该使用 VALUES 更改 SELECT
  • 谢谢。我将其更新为 VALUES,但出现新错误。
  • 将您的属性设置为 java.sql.Date 以解决问题
  • 能否给我们数据库中的表结构?
猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多