我有一个可以处理Post表单的Servlet,并将所有已定义的变量保存到MYSQL。
我现在正在尝试编写另一个Servlet,它将使用 req.getParameterMap()读取所有参数及其值,然后将它们发送到数据库,以防未指定参数也被记录下来。
我对第一个servlet的代码如下:
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
import java.sql.*;
public class QueryServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException
{
String transId = req.getParameter("transId") == null ? "" : req.getParameter("transId");
String instId = req.getParameter("instId") == null ? "" : req.getParameter("instId");
String cartId = req.getParameter("cartId") == null ? "" : req.getParameter("cartId");
String desc = req.getParameter("desc") == null ? "" : req.getParameter("desc");
String cost = req.getParameter("cost") == null ? "" : req.getParameter("cost");
String amount = req.getParameter("amount") == null ? "" : req.getParameter("amount");
String currency = req.getParameter("currency") == null ? "" : req.getParameter("currency");
String name = req.getParameter("name") == null ? "" : req.getParameter("name");
String transStatus = req.getParameter("transStatus") == null ? "" : req.getParameter("transStatus");
String transTime = req.getParameter("transTime") == null ? "" : req.getParameter("transTime");
String cardType = req.getParameter("cardType") == null ? "" : req.getParameter("cardType");
Connection conn = null;
PrintWriter out = res.getWriter();
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/orders", "root", "root");
String sqlStr = "insert into orderdetails "
+ "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sqlStr)) {
stmt.setString(1, transId);
stmt.setString(2, instId);
stmt.setString(3, cartId);
stmt.setString(4, desc);
stmt.setString(5, cost);
stmt.setString(6, amount);
stmt.setString(7, currency);
stmt.setString(8, name);
stmt.setString(9, transStatus);
stmt.setString(10, transTime);
stmt.setString(11, cardType);
int updateCount = stmt.executeUpdate();
for (Enumeration<String> en = req.getParameterNames(); en.hasMoreElements();) {
String paramName = en.nextElement();
String paramValue = req.getParameter(paramName);
}
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
对于第二个Servlet,我设法让它能够读取所有参数及其值并在网页上显示它们但我不知道如何将它们连接到数据库,或者通过创建参数的列或已创建它们,只创建行值。
您可以提供一些指导或示例吗?
Bellow是第二个Servlet的代码;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QueryServlet extends HttpServlet
{
protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
PrintWriter pw=res.getWriter();
res.setContentType("text/html");
Map m=req.getParameterMap();
Set s = m.entrySet();
Iterator it = s.iterator();
while(it.hasNext()){
Map.Entry<String,String[]> entry = (Map.Entry<String,String[]>)it.next();
String key = entry.getKey();
String[] value = entry.getValue();
pw.println("Key is "+key+"<br>");
if(value.length>1){
for (int i = 0; i < value.length; i++) {
pw.println("<li>" + value[i].toString() + "</li><br>");
}
}else
pw.println("Value is "+value[0].toString()+"<br>");
pw.println("-------------------<br>");
}
pw.close();
}
}
非常感谢任何帮助。
干杯
答案 0 :(得分:1)
首先,您需要在执行插入时开始指定列,除非您希望稍后在向表中添加列时中断代码。按照您的方式进行操作,您始终必须按照定义的顺序包含所有列。
如果您指定了列,那么您只能使用所需的列,并且可以按照您想要的任何顺序使用。
insert into tablename (col1, col2) values('col1val', 'col2val');
insert into tablename (col2, col1, col5) values('col2val', 'col1val', 'col5val');
从那里你应该能够弄清楚如何修改第二个servlet以使用Key和Value变量插入,并创建内部以进入SQL列表的列列表和值列表部分。