我 st着一个保守的问题——我的数据库连接正在翻开。 顺差部分是,同一数据库代码在另一个类别中进行罚款。 我对我的组合进行了双重检查,装上了亚行的驾驶员,并在Tomcat测试了这一配置,但该信封的连接却被搁置。
Type Exception Report
Message Cannot invoke "java.sql.Connection.prepareStatement(String)" because "connection" is null
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.NullPointerException: Cannot invoke "java.sql.Connection.prepareStatement(String)" because "connection" is null
单州Connection.java:
public class SingletonConnection {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/CATALOGUE";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static Connection connection;
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
return connection;
}
}
ProduitdaoImp.java
public class ProduitdaoImp implements IProduitdao {
@Override
public List<Produit> chercher(String mc) {
Connection connection = SingletonConnection.getConnection();
List<Produit> produits = new ArrayList<Produit>();
try {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM PRODUITS WHERE DESIGNATION LIKE ?");
preparedStatement.setString(1, "%" + mc + "%");
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
Produit p = new Produit();
p.setId(rs.getInt("ID"));
p.setPrix(rs.getDouble("PRIX"));
p.setQuantite(rs.getLong("QUANTITE"));
p.setDesignation(rs.getString("DESIGNATION"));
produits.add(p);
}
} catch (SQLException e) {
e.printStackTrace();
}
return produits;
}
}
ControleurServlet.java
public class ControleurServlet extends HttpServlet {
public IProduitdao iProduitdao;
@Override
public void init() throws ServletException {
iProduitdao = new ProduitdaoImp();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getServletPath();
if (path.equals("/index.do")) {
request.getRequestDispatcher("Produits.jsp").forward(request, response);
} else if (path.equals("/chercher.do")) {
String mot = request.getParameter("motcle");
ProduitModel produitModel = new ProduitModel();
produitModel.setMotCle(mot);
List<Produit> produits = iProduitdao.chercher(mot);
produitModel.setProduits(produits);
request.setAttribute("model", produitModel);
request.getRequestDispatcher("Produits.jsp").forward(request, response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Produits.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Produits</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
</head>
<body>
<p></p>
<div>
<div>
<div > Recherche des produits</div>
<div ></div>
<form method="get" action="chercher.do">
<label>Mot CLe</label>
<input type="text" name="motcle"/>
<button type="submit">Chercher</button>
</form>
<table>
<tr>
<th>ID</th><th>DESIGNATIONNs</th><th>PRIX</th><th>QUANTITE</th>
</tr>
<c:forEach items="${model.produits}" var="p">
<tr>
<td>${p.id}</td>
<td>${p.designation}</td>
<td>${p.prix}</td>
<td>${p.quantite}</td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>