我正在开发一个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表中存储日期之外还有其他方法,请告诉我。
2条答案
按热度按时间zz2j4svz1#
java.time文件
假设您至少可以使用java 8和jdbc 4.2:
不要将日期作为字符串保存到mysql。使用日期对象。当然更喜欢现代的
LocalDate
长期以来java.sql.Date
有问题的设计。注意使用setObject()
而不是setDate()
.在这里,我们不能完全避免老式的
java.util.Date
既然纺纱机正在给我们一个(你可能想研究一下你是否可以填补)LocalDate
对象放入微调器,但它不是我的主字段,我不知道)。在这种情况下,首先要做的是转换Date
为了现代人Instant
这样我们就可以用java.time
,现代java日期和时间api。我相信你可以避免老式的
SimpleDateFormat
不过,还是要上课。简单一点:最后,自从
PreparedStatement
是一个接口,而不是一个类,您无法执行您尝试的操作:这不在这个问题范围之内,所以我只想说你需要一个
Connection
. 我相信你会发现的(如果没有,问一个新问题)。fcy6dtqo2#
这个
Date
输入JDBC
是java.sql.Date
另一种情况是java.util.Date
,它们不相同,不能直接转换你可以试试下面的代码
顺便说一句,如果你正在使用
java-8
以及jdbc-4
,更合适的方法是使用localdate