在 Jform(GUI) 的 3 个组合框中显示来自 java 数据库的日期字段
Displaying a date field from the java DB in 3 combo boxes in a Jform(GUI)
所以我一直忙于制作一个程序,从 netbeans 中的 java 数据库中提取预设数据并将其显示在 Jform GUI 中。
我的所有数据都正确显示,除了我的日期。在我的数据库中,它设置在日期字段中,因此它是一个值,但我需要它显示在 3 个单独的组合框中。
经过长时间的测试,我发现我的程序试图将 "dd/mm/yy" 的完整日期插入到 "dd" 组合框、"mm" 组合框和"yy" 组合框同时出现,即使这些框没有正确的参数,请您帮我弄清楚如何解决这个问题。
这是我的代码:
try
{
//Connect to the DB
String url = "jdbc:derby://localhost:1527/PAT_DB";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String QuerySearch = "SELECT * FROM TBLPATIENTS WHERE PATIENT_ID = "+List1.getSelectedValue()+"";
ResultSet rs = stmt.executeQuery(QuerySearch);
while(rs.next())
{
PatientID_field.setText(rs.getString(1));
FirstName_field.setText(rs.getString(2));
LastName_field.setText(rs.getString(3));
//This is where im having problems
year_field.setSelectedItem(rs.getDate(4));
month_field.setSelectedItem(rs.getDate(4));
day_field.setSelectedItem(rs.getDate(4));
//This is where im having problems
Sex_field.setSelectedItem(rs.getString(5));
Address_field.setText(rs.getString(6));
City_field.setText(rs.getString(7));
PostalCode_field.setText(rs.getString(8));
Charge_field.setText(rs.getString(9));
Paid_field.setSelectedItem(rs.getString(10));
DoctorID_field.setText(rs.getString(11));
}
P.S。我试过将日期字段更改为 .getString 并且没有区别。
括号中的数字 eg.
DoctorID_field.setText(rs.getString(11));
那(11)对应的是数据库中table中数据所在的列。如果我标记超过 11,则语句超出范围并且不起作用。
这是我的 GUI 的屏幕截图:
year_field.setSelectedItem(rs.getDate(4));
month_field.setSelectedItem(rs.getDate(4));
day_field.setSelectedItem(rs.getDate(4));
那么如果数据库中的数据是 Date
那么你需要先访问 Date
:
Date date = rs.getDate(4);
现在 Date
class 中的大多数方法都已弃用,因此您真的不想使用 class。相反,您可以使用 Calendar
:
Calendar calendar = Calendar.getInstance();
calendar.setTime( date );
现在您可以从日历中分别访问日、月和年:
int day = calendar.get( Calendar.DATE );
day_field.setSelectedIndex( day );
请注意,您可能需要使用 (day - 1),我不记得该天是否基于零。
对月份和年份做同样的事情。对于年份,您需要将年份转换为字符串,以便您可以使用 setSelectedItem(...)
方法,因为您的组合框模型中不会有 2000 年。
所以我一直忙于制作一个程序,从 netbeans 中的 java 数据库中提取预设数据并将其显示在 Jform GUI 中。
我的所有数据都正确显示,除了我的日期。在我的数据库中,它设置在日期字段中,因此它是一个值,但我需要它显示在 3 个单独的组合框中。
经过长时间的测试,我发现我的程序试图将 "dd/mm/yy" 的完整日期插入到 "dd" 组合框、"mm" 组合框和"yy" 组合框同时出现,即使这些框没有正确的参数,请您帮我弄清楚如何解决这个问题。
这是我的代码:
try
{
//Connect to the DB
String url = "jdbc:derby://localhost:1527/PAT_DB";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String QuerySearch = "SELECT * FROM TBLPATIENTS WHERE PATIENT_ID = "+List1.getSelectedValue()+"";
ResultSet rs = stmt.executeQuery(QuerySearch);
while(rs.next())
{
PatientID_field.setText(rs.getString(1));
FirstName_field.setText(rs.getString(2));
LastName_field.setText(rs.getString(3));
//This is where im having problems
year_field.setSelectedItem(rs.getDate(4));
month_field.setSelectedItem(rs.getDate(4));
day_field.setSelectedItem(rs.getDate(4));
//This is where im having problems
Sex_field.setSelectedItem(rs.getString(5));
Address_field.setText(rs.getString(6));
City_field.setText(rs.getString(7));
PostalCode_field.setText(rs.getString(8));
Charge_field.setText(rs.getString(9));
Paid_field.setSelectedItem(rs.getString(10));
DoctorID_field.setText(rs.getString(11));
}
P.S。我试过将日期字段更改为 .getString 并且没有区别。 括号中的数字 eg.
DoctorID_field.setText(rs.getString(11));
那(11)对应的是数据库中table中数据所在的列。如果我标记超过 11,则语句超出范围并且不起作用。
这是我的 GUI 的屏幕截图:
year_field.setSelectedItem(rs.getDate(4));
month_field.setSelectedItem(rs.getDate(4));
day_field.setSelectedItem(rs.getDate(4));
那么如果数据库中的数据是 Date
那么你需要先访问 Date
:
Date date = rs.getDate(4);
现在 Date
class 中的大多数方法都已弃用,因此您真的不想使用 class。相反,您可以使用 Calendar
:
Calendar calendar = Calendar.getInstance();
calendar.setTime( date );
现在您可以从日历中分别访问日、月和年:
int day = calendar.get( Calendar.DATE );
day_field.setSelectedIndex( day );
请注意,您可能需要使用 (day - 1),我不记得该天是否基于零。
对月份和年份做同样的事情。对于年份,您需要将年份转换为字符串,以便您可以使用 setSelectedItem(...)
方法,因为您的组合框模型中不会有 2000 年。