我在MySQL参考页面的某处读到,DATE
数据类型接受'YYYY-MM-DD'
或YYYYMMDD
中的日期。因此,String
或int
我有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日作为样本日期时,我收到此消息。
然后我尝试使用日历类在月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;
答案 0 :(得分:1)
根据您的留言
......价值:'198743'
肯定'198743'似乎不是YYYYMMDD
格式的日期(8个强制性职位),在4
和3
之前缺少几个零来获得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);