建立一个 Derby 日历,第 2 部分: 嵌入选项(上)
2010-04-19 00:00:00 来源:WEB开发网所有动作都在 SaveListener.actionPerformed() 方法中完成。首先提取月份和日期信息。Java 数组是以零为基数的,因此需要加 1 来修正。年份用字符串表示,因此只要使用 String 值转化成 int 值。
得到这些数据之后,将其送入 EventClass 构造函数,就像在 GUI 版本中那样。EventClass 输出到命令行,因此可以看到类似 清单 6 的结果。
清单 6. EventClass 命令行输出
Creating event for 7/3/2006
Sis's birthday
Don't forget to call!
Reminders to: reminders@nicholaschase.com
Record updated
调整 Calendar 类
虽然保存了事件,但是要显示这些事件必须调整 Calendar 类。这个类输出某年某月某日的事件,如 清单 7 所示。
清单 7. 输出某一天的事件
>>java Calendar 7 3 2006
14
Sis's birthday
Don't forget to call!
reminders@nicholaschase.com
7/3/2006
对于测试来说这就够了,但是对于在 GUI 窗口中显示信息毫无用处。需要 Calendar 返回 EventClass 对象数组供应用程序其他部分使用。可以直接修改 getEvents() 方法,如 清单 8 所示。
清单 8. 返回数组而不是文本
...
public static EventClass[] getEvents(int eventMonth,
int eventDay, int eventYear) {
try {
Connection conn = getConnection();
Statement s = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = s.executeQuery("SELECT * FROM Event "+
"where eventMonth="+eventMonth+
" and eventDay="+eventDay+" and "+
"eventYear="+eventYear);
EventClass[] events = null;
if (!rs.next()){
return null;
} else {
rs.last();
int numberOfEvents = rs.getRow();
rs.beforeFirst();
events = new EventClass[numberOfEvents];
int thisEventIndex = 0;
EventClass thisEvent = null;
while (rs.next()) {
thisEvent = new EventClass(rs.getInt(1));
thisEvent.setTitle(rs.getString(2));
thisEvent.setDescription(rs.getString(3));
thisEvent.setRemindersTo(rs.getString(4));
thisEvent.setEventMonth(rs.getInt(5));
thisEvent.setEventDay(rs.getInt(6));
thisEvent.setEventYear(rs.getInt(7));
events[thisEventIndex] = thisEvent;
thisEventIndex = thisEventIndex + 1;
}
}
rs.close();
s.close();
conn.close();
try {
DriverManager.getConnection(
"jdbc:derby:;shutdown=true");
} catch (SQLException se) { }
return events;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
...
更多精彩
赞助商链接