建立一个 Derby 日历,第 3 部分: 使用事务和锁定(下)
2010-04-19 00:00:00 来源:WEB开发网修改应用程序:CalendarFrame
现在将其结合在一起。应用程序的主体,包括每个 GUI 元素,都在 CalendarFrame 类中。
整个应用程序
自从 第 2 部分 以后,该应用程序已经几经修改,更容易使用和维护了。一些变化对最终用户是可见的,另一些则不然。主要的变化包括外观上的变化,增加了更便于选择日期的日历选择器。另外,我们已经看到,该应用程序现在增加了可编辑的表格,用户可以修改已有事件的信息。
其他变化对终端用户就不那么明显了。比如,早期版本在每次修改(比如增加记录)被添加到数据库中时都要连接到数据库。现在当用户打开应用程序时建立连接,并在用户会话中一直保持该连接。
为了便于维护,连接现在由单独的类处理。
Database 类
严格地说,Database 是一个工具类,提供了常量和必要的函数,比如返回其他部分使用的 Connection(参见 清单 20)。
清单 20. Database 类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
class Database {
private static final String EMBEDDED_DRIVER =
"org.apache.derby.jdbc.EmbeddedDriver";
private static final String NETWORKED_DRIVER =
"org.apache.derby.jdbc.ClientDriver";
private static final String PROTOCOL = "jdbc:derby";
private static final String EMBEDDED_DB = "c:/derby/calendar";
private static final String NETWORK_DB =
"//localhost:1527/c:/derby/calendar";
public static final int EMBEDDED = 1;
public static final int NETWORKED = 2;
static Connection getConnection(int DB_TYPE) throws Exception {
return getConnection(null, DB_TYPE);
}
static Connection getConnection(String options, int DB_TYPE)
throws Exception {
String url = PROTOCOL + ':';
if (DB_TYPE == EMBEDDED) {
url += EMBEDDED_DB;
Class.forName(EMBEDDED_DRIVER).newInstance();
} else if (DB_TYPE == NETWORKED) {
url += NETWORK_DB;
Class.forName(NETWORKED_DRIVER).newInstance();
}
if (options != null) {
url += ';' + options;
}
return DriverManager.getConnection(url);
}
public static void closeConnection(Connection conn) {
if (conn == null) {
return;
}
try {
conn.close();
DriverManager.getConnection("jdbc:derby:;shutdown=true");
} catch (SQLException se) {
//se.printStackTrace();
}
}
public static void createTableIfNotExists() {
Connection conn = null;
try {
conn = Database.getConnection("create=true", EMBEDDED);
Statement st = conn.createStatement();
st.executeUpdate("create table Event (id INT GENERATED "
+ "ALWAYS AS IDENTITY, title VARCHAR(50), "
+ "description VARCHAR(255), remindersTo "
+ "VARCHAR(255), eventMonth INT, eventDay INT, "
+ "eventYear INT)");
} catch (Exception e) {
// e.printStackTrace();
} finally {
Database.closeConnection(conn);
}
}
}
更多精彩
赞助商链接