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<TenderEntity> 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=' + keywordvar 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 > 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) > 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_date
♪end_date
Typedate
with limitationNOT NULL
, and the original class indicates the typeString
and you should.nullable = true
♪ If the base is generated from nature, it must be regenerated.