我正在尝试创建一个简单的Web应用程序,将用户数据从表单保存到数据库,并根据请求将数据库的内容读回浏览器。以下是我到目前为止所写的功能。
connectToDB() // connects to database
addEmployee() // adds employee to database
displayEmployee() // returns a resultSet
isExisted(int staffID) // checks if the staff already exists
数据库连接功能:
public void connectToDB(){
try{
// load Apache derby driver
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
} catch(ClassNotFoundException e) {
System.err.println(e);
}
try{
connection = DriverManager.getConnection(DBNAME, USERNAME, PASSWORD);
} catch(SQLException e){
System.err.println(e);
}
} // end connectToDB
显示员工职能:
public ResultSet displayEmployee(){
connectToDB();
ResultSet result = null;
try{
Statement stmt = connection.createStatement();
String query = "SELECT * FROM APP.ADDRESSBOOK";
result = stmt.executeQuery(query);
} catch(SQLException e) {
System.err.println(e);
}
return result;
}
检查员工是否存在:
public boolean isExisted(int StaffID){
connectToDB();
try{
Statement stmt = connection.createStatement();
String query = "SELECT StaffNum FROM APP.ADDRESSBOOK WHERE StaffNum = " + staff_number;
ResultSet result = stmt.executeQuery(query);
while(result.next()){
int temp = result.getInt(1);
if(temp == staff_number){return true;}
}
} catch(SQLException e) {
System.err.println(e);
}
return false;
}
如您所见,如果您比较displayEmployee()
和isExisted()
,我会重复mysel。这两个功能都有效,但我希望重构代码。在那些功能我没有关闭连接。如果Web应用程序中有20个连接到数据库的函数,我的代码会发臭。
我看起来像这样: * 此代码无法正常工作 * ** * **
private Statement queryDB(query){
connectToDB();
Statement stmt;
try{
stmt = connection.createStatement();
} catch(SQLException e) {
System.err.println(e);
}
return stmt;
// code for closing connection
}
public ResultSet DisplayEmployee(){
String query = "SELECT * FROM APP.ADDRESSBOOK";
Statement stmt = queryDB(query);
ResultSet result = stmt.executeQuery(query);
return result;
}
感谢。
答案 0 :(得分:2)
几条评论:
ClassNotFoundException
的catch语句应抛出异常,不应再继续。CachedRowSet
中。我的两分钱!
答案 1 :(得分:2)
使用原始JDBC会产生许多难看的样板代码。一种解决方案是使用Spring JDBC Template。
此外,您将获得sql异常层次结构,该层次结构将自动将基础JDBC异常作为运行时异常进行管理。
了解更多信息: