我正在使用jsps和servlet使用jdbc为我的项目创建一个在线电子门户网站。但是我收到一个奇怪的错误。我无法使用while语句添加多行。我正在获取产品通过会话,来自散列图的购物车中所有可用项目的ID(PID)。我存储相应的密钥,即(此处的密钥为pids,值为数量)。我正在使用pid得到pids并获得该产品的相应属性。我正在使用insertuseruser数据在 while 循环中使用他/她的购物车中的项目更新特定用户表。首先,我正在检查是否存在特定用户的表..然后我只是添加记录,否则我正在创建一个新表并逐个插入记录 这是servlet代码
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
HttpSession ses=request.getSession();
HashMap h=(HashMap)ses.getAttribute("list");
String usr=(String) ses.getAttribute("usr");
String usertable="USER"+usr;
Collection c=h.keySet();
Iterator itr=c.iterator();
connect.dbconnect con=new connect.dbconnect();
int tCost=Integer.parseInt((String)ses.getAttribute("tCost"));
while(itr.hasNext())
{
Object pid=itr.next();
String v;
v=con.Pid_buy((String)pid);
String pname=v;
String quan=(String)h.get(pid);
Date dt=new java.util.Date();
String date=(dt.toString());
String status="Purchased";
try{
if(con.chktable(usertable))
{
int num=con.getSID(usertable);
con.insertuserdata(usertable,num+1,quan,date,pname,status,tCost);
}
if(!con.chktable(usertable))
{
con.createnewuser(usertable);
con.insertuserdata(usertable,1,quan,date,pname,status,tCost);
}
}catch(Exception e)
{
e.printStackTrace();
}
con.updateStock((String)pid,Integer.parseInt(quan));
}
h.clear();
String count=null;
ses.setAttribute("count", count);
ses.setAttribute("list", h);
// response.sendRedirect("home.jsp");
} finally {
out.close();
}
}
这里列表是包含项目列表及其数量的hashmap.tCost只是我作为参数获得的总成本。 getSID 函数为我提供了表格中的行数。 PID_BUY 为我提供了产品名称
这里的问题是它只添加数据库中的最后一个产品而不是所有产品。我得到一般错误
以下是我的 Insertuserdata 方法
public void insertuserdata(String tbname,int pk,String quantity,String date,String pname,String status,float tCost) throws SQLException, ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:product");
// Table exists
String data=tbname ;
PreparedStatement smt1=con.prepareStatement("insert into ["+data+"] values (?,?,?,?,?,?)");
smt1.setInt(1,pk);
smt1.setString(2,quantity);
smt1.setString(3,date);
smt1.setString(4,pname);
smt1.setString(5,status);
smt1.setFloat(6,tCost);
smt1.executeUpdate();
}