JDBCSpring4Java将文本框输入转换为数字和日期的正确方法
我在尝试更新JSP web表单上的记录时遇到一个400错误,其中输入来自文本框。我读到这可能是由于整数的字符串到整数的问题,或者日期的字符串到日期的问题 我的桌子是这样的:JDBCSpring4Java将文本框输入转换为数字和日期的正确方法,java,sql,spring,oracle,jdbc,Java,Sql,Spring,Oracle,Jdbc,我在尝试更新JSP web表单上的记录时遇到一个400错误,其中输入来自文本框。我读到这可能是由于整数的字符串到整数的问题,或者日期的字符串到日期的问题 我的桌子是这样的: // Name Null? Type // ----------------------------------------- -------- ---------------------------- // JOB_NUMBE
// Name Null? Type
// ----------------------------------------- -------- ----------------------------
// JOB_NUMBER NOT NULL NUMBER(10)
// JOB_NAME NOT NULL VARCHAR2(200)
// DROP_CODE VARCHAR2(10)
// QUANTITY NUMBER(10)
// MBI_NUMBER VARCHAR2(20)
// PICKUP_DATE DATE
// DROP_DATE DATE
// INHOME_DATE DATE
JSP输入示例:
<td><form:input path="jobNumber" class="form-control input-sm" value="${row.jobNumber}" cssStyle="width: 99%"/></td>
摘自记录类:
public int getJobNumber() {
return jobNumber;
}
public void setJobNumber(int jobNumber) {
this.jobNumber = jobNumber;
}
public Date getInhomeDate(){
return inhomeDate;
}
public void setInhomeDate(Date inhomeDate) {
this
private int jobNumber;
private Date inhomeDate;
服务类别的相关代码:
// C.R."U".D.
public void updateRecord(@ModelAttribute("record") WorkPage1Record record) {
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement(
// Name Null? Type
// ----------------------------------------- -------- ----------------------------
// JOB_NUMBER NOT NULL NUMBER(10)
// JOB_NAME NOT NULL VARCHAR2(200)
// DROP_CODE VARCHAR2(10)
// QUANTITY NUMBER(10)
// MBI_NUMBER VARCHAR2(20)
// PICKUP_DATE DATE
// DROP_DATE DATE
// INHOME_DATE DATE
"UPDATE sys.jobs SET "
+ "JOB_NAME = ?, "
+ "DROP_CODE = ?, "
+ "QUANTITY = ?, "
+ "MBI_NUMBER = ?, "
+ "PICKUP_DATE = ?, "
+ "DROP_DATE = ?, "
+ "INHOME_DATE = ?, "
+ "WHERE JOB_NUMBER = ?");
} catch (SQLException e) {
LOGGER.error("### Could not prepare single insert statement in jobs table", e);
}
try {
// duplicate of what is in the createRecord method
stmt.setInt(1, record.getJobNumber());
stmt.setString(2, record.getJobName());
stmt.setString(3, record.getDropCode());
stmt.setInt(4, record.getQuantity());
stmt.setString(5, record.getMbiNumber());
stmt.setDate(6, record.getPickupDate());
stmt.setDate(7, record.getDropDate());
stmt.setDate(8, record.getInhomeDate());
stmt.executeUpdate();
commit();
} catch (Exception e) {
LOGGER.error("### Could not update jobs table record", e);
}
try {
stmt.close();
} catch (SQLException e) {
LOGGER.error("### Could not close jobs table update statement", e);
}
}
这段代码的最小更改是什么,它允许我正确地处理JSP表单的输入,以便正确地将其转换为记录类指定的任何类型?之前,我一直在作弊,只是将表VARCHAR2中的所有字段都转换为字符串,以避免将整个字符串转换为神秘的、文档记录不良的“日期”转换 我不是SpringMVC方面的专家,但我认为您必须将表单与模型对象链接,在您的情况下,它将是“updateRecord”。首先创建或检索该对象,然后在JSP中显示它。提交表单时,引入的数据将使用转换器绑定到该对象。我认为Spring有一些默认的转换器,也许你必须配置它们。然后你可以将这个对象保存在数据库中。也许如果你把堆栈跟踪放在404(我想不是400)代码中,人们可以帮助你。我读过关于SpringMVC的书,这些转换应该是自动进行的。这不是404错误。这是一个错误。你能举一个例子说明你在说什么吗?400意味着糟糕的要求。我认为这与转换类型无关。404通常在由于异常而无法生成响应时出现。下面是一个包含日期的表单示例,它可能会帮助您我不是spring mvc的专家,但我认为您必须将表单与模型对象链接,在您的情况下,它将是“updateRecord”。首先创建或检索该对象,然后在JSP中显示它。提交表单时,引入的数据将使用转换器绑定到该对象。我认为Spring有一些默认的转换器,也许你必须配置它们。然后你可以将这个对象保存在数据库中。也许如果你把堆栈跟踪放在404(我想不是400)代码中,人们可以帮助你。我读过关于SpringMVC的书,这些转换应该是自动进行的。这不是404错误。这是一个错误。你能举一个例子说明你在说什么吗?400意味着糟糕的要求。我认为这与转换类型无关。404通常在由于异常而无法生成响应时出现。下面是一个包含日期的表单示例,它可能会对您有所帮助
// C.R."U".D.
public void updateRecord(@ModelAttribute("record") WorkPage1Record record) {
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement(
// Name Null? Type
// ----------------------------------------- -------- ----------------------------
// JOB_NUMBER NOT NULL NUMBER(10)
// JOB_NAME NOT NULL VARCHAR2(200)
// DROP_CODE VARCHAR2(10)
// QUANTITY NUMBER(10)
// MBI_NUMBER VARCHAR2(20)
// PICKUP_DATE DATE
// DROP_DATE DATE
// INHOME_DATE DATE
"UPDATE sys.jobs SET "
+ "JOB_NAME = ?, "
+ "DROP_CODE = ?, "
+ "QUANTITY = ?, "
+ "MBI_NUMBER = ?, "
+ "PICKUP_DATE = ?, "
+ "DROP_DATE = ?, "
+ "INHOME_DATE = ?, "
+ "WHERE JOB_NUMBER = ?");
} catch (SQLException e) {
LOGGER.error("### Could not prepare single insert statement in jobs table", e);
}
try {
// duplicate of what is in the createRecord method
stmt.setInt(1, record.getJobNumber());
stmt.setString(2, record.getJobName());
stmt.setString(3, record.getDropCode());
stmt.setInt(4, record.getQuantity());
stmt.setString(5, record.getMbiNumber());
stmt.setDate(6, record.getPickupDate());
stmt.setDate(7, record.getDropDate());
stmt.setDate(8, record.getInhomeDate());
stmt.executeUpdate();
commit();
} catch (Exception e) {
LOGGER.error("### Could not update jobs table record", e);
}
try {
stmt.close();
} catch (SQLException e) {
LOGGER.error("### Could not close jobs table update statement", e);
}
}