java—从jspinner中获取日期并放入具有日期格式的mysql数据库列

cwtwac6a  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(428)

我正在开发一个java程序,我想输入用户的日期。
为此,我使用了jspinner,并从spinner模型编辑器中将其模型类型设置为date。
另外,在默认情况下,微调器还显示时间及其属性,我不需要时间,但只需要日期。因此,我创建了一个新的simpledateformat并应用于微调器。
以下是SimpleDataFormat的代码:

SimpleDateFormat date_format = new SimpleDateFormat("dd-MM-yyyy");
dateSpinner.setEditor(new JSpinner.DateEditor(dateSpinner,date_format.toPattern()));

我使用日期格式是因为我想以dd-mm-yyyy格式显示日期。
之后,我使用statechanged方法通过jspinner获取用户选择的日期。
方法主体如下:

private void stateChanged(javax.swing.event.ChangeEvent evt) {        

    Date dateChosen = (Date) dateSpinner.getValue();

    int date = dateChosen.getDate();
    int month = ( dateChosen.getMonth() ) + 1;
    int year = ( dateChosen.getYear() ) + 1900;        
    String DB_Date = String.valueOf(year) + "-" + String.valueOf(month) + "-" + String.valueOf(date);

   // 1 was added to**month**because month's were 1 less than the conventional human format
   // also, 1900 was added to**year**to make it suitable for apperance of human conventions

}

现在,我希望将这个日期从用户输入到我的mysql数据库列中,该列的数据类型是date。
为此,我尝试了以下方法:-
1我尝试使用setdate()方法,其参数为dateselected,其代码如下:-

PreparedStatement stmt = new PreparedStatement();
stmt.setDate (column_no, (java.sql.Date) dateChosen);

但是没有存储日期,mysql表的date列为空。
.
2我尝试使用setstring()方法,其参数为db\u date,其代码如下:

PreparedStatement stmt = new PreparedStatemnt();
 stmt.setString (column_no, DB_Date);

但是,mysql表的(date)列仍然留空。
现在,我想知道如何将jspinner中的日期存储到数据类型为date的mysql表列中。
另外,如果除了使用jspinner在mysql表中存储日期之外还有其他方法,请告诉我。

zz2j4svz

zz2j4svz1#

java.time文件

假设您至少可以使用java 8和jdbc 4.2:

LocalDate dateToSave = dateChosen.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDate();
    stmt.setObject(column_no, dateToSave);

不要将日期作为字符串保存到mysql。使用日期对象。当然更喜欢现代的 LocalDate 长期以来 java.sql.Date 有问题的设计。注意使用 setObject() 而不是 setDate() .
在这里,我们不能完全避免老式的 java.util.Date 既然纺纱机正在给我们一个(你可能想研究一下你是否可以填补) LocalDate 对象放入微调器,但它不是我的主字段,我不知道)。在这种情况下,首先要做的是转换 Date 为了现代人 Instant 这样我们就可以用 java.time ,现代java日期和时间api。
我相信你可以避免老式的 SimpleDateFormat 不过,还是要上课。简单一点:

dateSpinner.setEditor(new JSpinner.DateEditor(dateSpinner, "dd-MM-yyyy"));

最后,自从 PreparedStatement 是一个接口,而不是一个类,您无法执行您尝试的操作:

PreparedStatement stmt = new PreparedStatemnt(); // Nogo; cannot instantiate the type PreparedStatement

这不在这个问题范围之内,所以我只想说你需要一个 Connection . 我相信你会发现的(如果没有,问一个新问题)。

fcy6dtqo

fcy6dtqo2#

这个 Date 输入 JDBCjava.sql.Date 另一种情况是 java.util.Date ,它们不相同,不能直接转换
你可以试试下面的代码

PreparedStatement stmt = new PreparedStatement();
stmt.setDate (column_no, new java.sql.Date(dateChosen.getTime()));

顺便说一句,如果你正在使用 java-8 以及 jdbc-4 ,更合适的方法是使用localdate

stmt.setDate (column_no, localDate.now());

相关问题