将JCombo整数值连接并转换为日期

时间:2016-08-01 10:49:34

标签: java mysql date parsing callable-statement

我在MySQL参考页面的某处读到,DATE数据类型接受'YYYY-MM-DD'YYYYMMDD中的日期。因此,Stringint

我有3个JComboBox用于日,月和年。

所以我将它们转换为int

int myDay = Integer.parseInt( dayJcbx.getSelectedItem().toString() );
int myYear = Integer.parseInt( yearJcbx.getSelectedItem().toString() );
int myMonth = Integer.parseInt( monthJcbx.getSelectedItem().toString() ); 

并尝试将它们连接为一个int

int birthdate = Integer.parseInt(myYear+""+myMonth+""+myDay);

匹配mySQL格式YYYYMMDD但仍无法将其插入数据库。当我试图插入1987年4月3日作为样本日期时,我收到此消息。

enter image description here

然后我尝试使用日历类在月0中添加MM但仍然失败。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, myYear);
calendar.set(Calendar.MONTH, myMonth - 1);
calendar.set(Calendar.DATE, myDay);

请告诉我通过CallableStatement cs.setDate(1,"date")cs.setString(1,"date")

插入日期的正确性

我希望你能帮助我解决这个问题,因为我现在因为约会而陷入困境。 我最近尝试过jodatime

顺便说一句,我的存储过程看起来像这样。

CREATE DEFINER=`root`@`localhost` PROCEDURE `register`(
p_dateOfBirth DATE)
BEGIN

    DECLARE EXIT HANDLER FOR sqlexception
    BEGIN
        ROLLBACK;
        RESIGNAL;
    END;

    START TRANSACTION;

    INSERT INTO registration(dateOfBirth)
    VALUES(p_dateOfBirth);

    COMMIT; 

2 个答案:

答案 0 :(得分:1)

根据您的留言

  

......价值:'198743'

肯定'198743'似乎不是YYYYMMDD格式的日期(8个强制性职位),在43之前缺少几个零来获得19870403什么**是正确的YYYYMMDD格式

快捷方式(如果你的组合每年4月代替"04"而不是"4"):

String myYear  = yearJcbx.getSelectedItem();
String myMonth = monthJcbx.getSelectedItem(); 
String myDay   = dayJcbx.getSelectedItem();

int birthdate  = Integer.parseInt(myYear+myMonth+myDay);

如果您无法更改组合的返回结果,请尝试此解决方法

// pad the strings with 0, 2 positions mandatory
int myYear     = Integer.parseInt( yearJcbx.getSelectedItem().toString() );
String myMonth = String.format("%02d", Integer.parseInt(monthJcbx.getSelectedItem()));
String myDay   = String.format("%02d", Integer.parseInt(dayJcbx.getSelectedItem());

int birthdate  = Integer.parseInt(myYear+myMonth+myDay);

DEMO:

String myDay = String.format("%02d", Integer.parseInt("4"));
System.out.println(myDay);

打印:

04

答案 1 :(得分:-1)

您可以使用 Java 8 DateTime API

执行此操作

需要进口

import java.sql.Date;
import java.time.LocalDate;

<强>代码:

LocalDate localDate = LocalDate.of(myYear,myMonth,myDay);
Date date = Date.valueOf(localDate);
cs.setDate(1,date);