lassen Sie uns annehmen, dass ich eine JSP-Seite habe, die während des Ladens muss zuerst Kategorien dann Produkte laden und ich habe eine Datenbank Verbindungsklasse mit listCategories und getProducts Funktionen meine Frage ist über sollte ich verbinden und schließen DB-Verbindung während in jeder Funktion aufgerufen oder eine Verbindung über der jsp Seite db und schließen, wenn Seite geladen Beispielcode:Best Practice für Datenbank-Verbindung und Schließen
public class DbConnection {
private Connection conn = null;
private PreparedStatement ps = null;
private ResultSet rs = null;
private void connect() {
try {
DriverManager.registerDriver(new Driver());
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop", "", "");
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void close() {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
public List<Category> listCategories() {
connect();
List<Category> listCategory = new ArrayList<>();
try {
ps = conn.prepareStatement("select * from Category where sub_category=0");
rs = ps.executeQuery();
while (rs.next()) {
Category u = new Category(rs.getInt("id"), rs.getString("name"), rs.getInt("sub_category"));
listCategory.add(u);
}
return listCategory;
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}finally{
close();
}
return null;
}
public List<Products> getProducts() {
connect();
List<Products> listProducts = new ArrayList<>();
try {
ps = conn.prepareStatement("select * from products");
rs = ps.executeQuery();
while (rs.next()) {
Products p = new Products(rs.getInt("id"), rs.getString("name"));
listCategory.add(p);
}
return listCategory;
} catch (SQLException ex) {
Logger.getLogger(DbConnection.class.getName()).log(Level.SEVERE, null, ex);
}finally{
close();
}
return null;
}
}
und Beispiel jsp Code:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<%for(Category c: dc.listCategories()){%>
<h1><%=c.getName()%></h1>
<%}%>
<%for(Products p: dc.getProducts()){%>
<h1><%=p.getName()%></h1>
<%}%>
<body>
<h1>Hello World!</h1>
</body>
</html>
Best Practice ist nie Scriptlets zu verwenden und ein Framework wie Spring MVC zu verwenden, das die Belange von Logik und Präsentation trennt. – chrylis
Ich stimme diese Frage als off-topic zu schließen, weil es nicht konstruktiv ist. – EJoshuaS
Sie sollten einen Verbindungspool verwenden, um Verbindungen wie DBCP2 zu verwalten – 11thdimension