我正在为学校做一个项目 - 我会尝试扩展应用程序并且我有点坚持这个。
我尝试使用预准备语句从表单中的文本字段向Oracle Thin数据库添加产品。
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
Class.forName(DB.driver);
connection = DriverManager.getConnection(DB.URL, DB.ID, DB.PW);
String query = "insert into parts values (?, '?', ?, ?, ?)";
statement = connection.prepareStatement(query);
statement.setInt(1, Integer.parseInt(request.getParameter("pno")));
statement.setString(2, request.getParameter("pname"));
statement.setInt(3, Integer.parseInt(request.getParameter("qoh")));
statement.setDouble(4, Double.parseDouble(request.getParameter("price")));
statement.setInt(5, Integer.parseInt(request.getParameter("olevel")));
statement.executeQuery(query);
} catch (ClassNotFoundException | SQLException ee) {
System.out.println("Connection failed!");
System.err.println(ee);
} finally {
try {
statement.close();
} catch (SQLException ex) {
Logger.getLogger(addProductServlet.class.getName()).log(Level.SEVERE, null, ex);
}
try {
connection.close();
} catch (SQLException ex) {
Logger.getLogger(addProductServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
RequestDispatcher rd = request.getRequestDispatcher("indexSuccess.jsp");
rd.forward(request, response);
}
产品没有被添加到数据库中,但是如果我对SQL查询进行硬编码就可以了。我已经检查过所有数据类型都是正确的。
表格如下:
<form action="addProductServlet">
<div class="form-group">
<input type="text" class="form-control margin-bottom-5" placeholder="Product No. (100XX)" name="pno" required>
<input type="text" class="form-control margin-bottom-5" placeholder="Product Name" name="pname" required>
<input type="text" class="form-control margin-bottom-5" placeholder="Quantity (XX)" name="qoh" required>
<input type="text" class="form-control margin-bottom-5" placeholder="Price (XX.XX)" name="price" required>
<input type="text" class="form-control" placeholder="Order Level" name="olevel" required>
</div>
<button class="btn btn-danger nice-bg-color" type="submit">Add product</button>
</form>
非常感谢帮助!
答案 0 :(得分:1)
将query
更改为
String query = "insert into parts values (?, ?, ?, ?, ?)";
请注意,String
参数不需要引用,因为PrepareStatement
会为您执行此操作。添加引号会导致有限值,''value'',
并中断最终查询语句。