SQL Error: 1292, SQLState: 22001 How to correct the error? Help!



  • Mistake:

    2021-11-08 17:09:03.305  WARN 34020 --- [legram Executor] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1292, SQLState: 22001
    2021-11-08 17:09:03.305 ERROR 34020 --- [legram Executor] o.h.engine.jdbc.spi.SqlExceptionHelper   : Data truncation: Incorrect date value: '' for column 'end_date' at row 1
    2021-11-08 17:09:03.320 ERROR 34020 --- [legram Executor] o.t.t.u.DefaultBotSession                : org.hibernate.exception.DataException: could not execute statement
    

    The bases are:

    -- auto-generated definition
    create table tender
    (
        id           int auto_increment
            primary key,
        found_date   date         not null,
        update_date  date         not null,
        subject      varchar(150) not null,
        organization varchar(150) not null,
        price        varchar(20)  not null,
        info         varchar(500) not null,
        status       varchar(20)  not null,
        start_date   date         not null,
        end_date     date         not null,
        url          varchar(100) not null,
        search_id    int          not null,
        constraint tender_fk0
            foreign key (search_id) references search (id)
    );
    

    Search.java

    package org.kasad0r.bot.look4tender;
    

    import jdk.nashorn.api.scripting.ScriptObjectMirror;
    import org.kasad0r.bot.MySQL.HibernateUtil;
    import org.kasad0r.bot.MySQL.SearchEntity;
    import org.kasad0r.bot.MySQL.TenderEntity;

    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;
    import java.sql.Date;
    import java.time.LocalDate;
    import java.util.ArrayList;

    public class Search {

    public static boolean execute(SearchEntity search) {
    

    //инициализация обработчика скриптов nashorn
    boolean changed = false;
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    try {
    //передача скрипта
    engine.eval(search.getPlatformByPlatformId().getScript());
    Invocable invocable = (Invocable) engine;

    //вызов метода init с параметром keyword из js
    invocable.invokeFunction("init", search.getKeyword());

    //получение результатов поиска (тендеров) при вызове функции searchTenders
    ArrayList<ScriptObjectMirror> tenders = (ArrayList<ScriptObjectMirror>) invocable.invokeFunction("searchTenders");

            for (ScriptObjectMirror s : tenders) {
                ArrayList&lt;TenderEntity&gt; tenderList = HibernateUtil.selectTender("from TenderEntity where id = '" +
                            s.getMember("id") + "' and searchBySearchId.id = " + search.getId());
    
    
                if (tenderList.size()==0) {
                    TenderEntity newTender = new TenderEntity();
                    newTender.setSubject(s.get("subject").toString());
                    newTender.setOrganization(s.get("organization").toString());
                    newTender.setPrice(s.get("price").toString());
                    newTender.setStatus(s.get("status").toString());
                    newTender.setStartDate(s.get("start_date").toString());
                    newTender.setEndDate(s.get("end_date").toString());
                    newTender.setUrl(s.get("url").toString());
                    newTender.setFoundDate(Date.valueOf(LocalDate.now()));
                    newTender.setUpdateDate(Date.valueOf(LocalDate.now()));
                    newTender.setSearchBySearchId(search);
                    HibernateUtil.insert(newTender);
                    changed = true;
                }
                else {
                    TenderEntity tender = tenderList.get(0);
                    if (!tender.getPrice().equals(s.get("price").toString())) {
                        tender.setPrice(s.get("price").toString());
                        changed = true;
                    }
                    if (!tender.getSubject().equals(s.get("subject").toString())) {
                        tender.setSubject(s.get("subject").toString());
                        changed = true;
                    }
                    if (!tender.getOrganization().equals(s.get("organization").toString())) {
                        tender.setOrganization(s.get("organization").toString());
                        changed = true;
                    }
                    if (!tender.getStatus().equals(s.get("status").toString())) {
                        tender.setStatus(s.get("status").toString());
                        changed = true;
                    }if (!tender.getUrl().equals(s.get("url").toString())){
                        tender.setUrl(s.get("url").toString());
                        changed = true;
                    }if
                    (!tender.getStartDate().equals(s.get("start_date").toString())){
                        tender.setStartDate(s.get("start_date").toString());
                        changed = true;
                    }if
                    (!tender.getEndDate().equals(s.get("end_date").toString())) {
                        tender.setEndDate(s.get("end_date").toString());
                        changed = true;
                    }if (changed){
                        tender.setUpdateDate(Date.valueOf(LocalDate.now()));
                        HibernateUtil.update(tender);
                    }
                }
            }
    
        } catch (ScriptException e) { e.printStackTrace();
        } catch (NoSuchMethodException e) { e.printStackTrace();
        }
        return changed;
    }
    

    }

    TenderEntiny.java

    package org.kasad0r.bot.MySQL;

    import javax.persistence.*;
    import java.sql.Date;

    @Entity
    @Table(name = "tender", schema = "bot", catalog = "")
    public class TenderEntity extends DataEntity {
    private int id;
    private Date foundDate;
    private Date updateDate;
    private String subject;
    private String organization;
    private String price;
    private String status;
    private String startDate;
    private String endDate;
    private String url;
    private String tenderId;
    private SearchEntity searchBySearchId;

    @Id
    @Column(name = "id", nullable = false) public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    @Basic
    @Column(name = "found_date", nullable = false) public Date getFoundDate() {
        return foundDate;
    }
    
    public void setFoundDate(Date foundDate) {
        this.foundDate = foundDate;
    }
    
    @Basic
    @Column(name = "update_date", nullable = true) public Date getUpdateDate() {
        return updateDate;
    }
    
    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }
    
    @Basic
    @Column(name = "subject", nullable = false, length = 500)
    public String getSubject() {
        return subject;
    }
    
    public void setSubject(String subject) {
        this.subject = subject;
    }
    
    @Basic
    @Column(name = "organization", nullable = false, length = 150)
    public String getOrganization() {
        return organization;
    }
    
    public void setOrganization(String organization) {
        this.organization = organization;
    }
    
    @Basic
    @Column(name = "price", nullable = true, length = 50)
    public String getPrice() {
        return price;
    }
    
    public void setPrice(String price) {
        this.price = price;
    }
    
    @Basic
    @Column(name = "status", nullable = true, length = 20)
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    
    @Basic
    @Column(name = "start_date", nullable = true)
    public String getStartDate() {
        return startDate;
    }
    
    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }
    
    @Basic
    @Column(name = "end_date", nullable = true)
    public String getEndDate() {
        return endDate;
    }
    
    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
    
    @Basic
    @Column(name = "url", nullable = false, length = 100)
    public String getUrl() {
        return url;
    }
    
    public void setUrl(String url) {
        this.url = url;
    }
    
    
    public void setTenderId(String tenderId) {
        this.tenderId = tenderId;
    }
    
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
    
        TenderEntity that = (TenderEntity) o;
    
        if (id != that.id) return false;
        if (foundDate != null ? !foundDate.equals(that.foundDate) : that.foundDate != null) return false;
        if (updateDate != null ? !updateDate.equals(that.updateDate) : that.updateDate != null) return false;
        if (subject != null ? !subject.equals(that.subject) : that.subject != null) return false;
        if (organization != null ? !organization.equals(that.organization) : that.organization != null) return false;
        if (price != null ? !price.equals(that.price) : that.price != null) return false;
        if (status != null ? !status.equals(that.status) : that.status != null) return false;
        if (startDate != null ? !startDate.equals(that.startDate) : that.startDate != null) return false;
        if (endDate != null ? !endDate.equals(that.endDate) : that.endDate != null) return false;
        if (url != null ? !url.equals(that.url) : that.url != null) return false;
        if (tenderId != null ? !tenderId.equals(that.tenderId) : that.tenderId != null) return false;
    
    
        return true;
    
    }
    
    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (foundDate != null ? foundDate.hashCode() :   0);
        result = 31 * result + (updateDate != null ? updateDate.hashCode() :0);
        result = 31 * result + (subject != null ? subject.hashCode() : 0);
        result = 31 * result + (organization != null ? organization.hashCode() : 0);
        result = 31 * result + (price != null ? price.hashCode() : 0);
        result = 31 * result + (status != null ? status.hashCode() : 0);
        result = 31 * result + (startDate != null ? startDate.hashCode() : 0);
        result = 31 * result + (endDate != null ? endDate.hashCode() : 0);
        result = 31 * result + (url != null ? url.hashCode() : 0);
        result = 31 * result + (tenderId != null ? tenderId.hashCode() : 0);
        return result;
    }
    
    
    @ManyToOne
    @JoinColumn(name = "search_id", referencedColumnName = "id", nullable = false)
    public SearchEntity getSearchBySearchId() {
        return searchBySearchId;
    }
    
    public void setSearchBySearchId(SearchEntity searchBySearchId) {
        this.searchBySearchId = searchBySearchId;
    
    }
    

    }

    zakazrf.ru.js

    var keyword;
    var url2 = 'http://www.zakazrf.ru/NotificationEx/Index?Filter=1&FastFilter=' + keyword

    var forEach = Array.prototype.forEach;

    var Connector = Java.type('org.kasad0r.bot.look4tender.Connector');
    var Selector = Java.type('org.kasad0r.bot.look4tender.Selector');

    var init = function(keyword2) {

    keyword = keyword2;
    
        var doc = Connector.getDoc(url2);
    
        lastPage = Selector.select(doc, 'input:nth-child(2)').attr("value");
    
        print(lastPage);
    };
    

    var searchTenders = function() {

    var list = new java.util.ArrayList();
    
        doc = Connector.getDoc(url2);
    
        var tenders = Selector.select(doc, 'tbody &gt; tr');
        tenders.remove(tenders.first());
    
    
        forEach.call(tenders, function(v) { print(1);
                var subject = v.select('td:nth-child(5)').text();
                var status = v.select('td:nth-child(3)').text();
                var price = v.select('td:nth-child(6)').text();
                var organization = v.select('td:nth-child(7)').text();
                var tender_id = v.select('td:nth-child(2)').text();
                var end_date = v.select('td:nth-child(15)').text().substring(0,11);
                var start_date = v.select('td:nth-child(10)').text().substring(0,11);
                var url = 'zakazrf.ru' + v.select('td:nth-child(2) &gt; a').attr('href');
    
    
                list.add(new Tender(tender_id, subject, status, price, organization, url, start_date, end_date));
            }
        );
        
    return list;
    

    }

    function Tender(id, subject, status, price, organization, url, start_date, end_date) {

    this.id = id;
    this.subject = subject;
    this.status = status;
    this.price = price;
    this.organization = organization;
    this.url = url;
    this.start_date = start_date;
    this.end_date = end_date;
    

    }

    I've been looking for every end_date there's nothing wrong with where ''?

    I can't find a mistake, help!



  • Here's the main problem with design is that in the field database. start_dateend_date Type date with limitation NOT NULL, and the original class indicates the type String and you should. nullable = true♪ If the base is generated from nature, it must be regenerated.



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2