操作数据库时,一个方法的多个异常

来源:互联网 发布:淘宝客服的连接地址 编辑:程序博客网 时间:2024/06/05 16:58

修改过的方法:

    /**
     * 将订单写入数据库,这儿会同时操作2张表
     * 返回订单的id,我们可以得到用户的id,进而得到货物id
     * 所有我们能得到订单的详细信息
     * @author center
     * @param mcp 购物车
     * @param id 用户id
     * @return orderid String 操作成功将返回订单的id号
     */
   
    public synchronized String updateOrder(MyCartPro mcp,String userName){
     
     //取得当前时间
     Date date=new Date();
     String orderid=null;
     String userId=null;
     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     String orderDate=sdf.format(date);
     try {
      ct=new ConnOrder1().getOrder1Conn();
      ps=ct.prepareStatement("select userid from users1 where username=?");
      ps.setString(1, userName);
      rs=ps.executeQuery();
      if (rs.next()) {
    userId=rs.getString(1);
    
   }
      //如果找不到用户id,会出现异常。
   ps=ct.prepareStatement("insert into order1(userid,orderdate,paymethod,ispay,totalprice)values(?,?,?,?,?)");
   ps.setString(1, userId);
   ps.setString(2, orderDate);
   ps.setString(3, "货到付款");
   ps.setString(4, "0");
   ps.setFloat(5, mcp.getTotalPrice());
   int num=ps.executeUpdate();
   
   //获得当前的订单编号,这种办法会不会不好,当2个ie进程同时执行该方法时,数据库的一致性很难保证,虽然用了线程的同步但

   //不知道行不行
   ps=ct.prepareStatement("select max(orderid) from order1");
   rs=ps.executeQuery();
   if (rs.next()) {
   orderid=rs.getString(1);
   }
   if (num==1&&orderid!=null) {
    //订单表插入成功
    //插入订单详细表
    
    List<CartBean> al=mcp.showMyCart();
    //循环准备批量执行的sql
    ps=ct.prepareStatement("insert into orderdetail(orderid,goodid,nums) " +
    "values(?,?,?)");         
                for (int i=0;i<al.size();i++) {
     CartBean cb = al.get(i);
        ps.setString(1, orderid);
     ps.setString(2, cb.getId());
     ps.setString(3, cb.getBuyNum());
     ps.addBatch();
       
    /**
     * 用statement实现sql语句的批量执行。
     */
    /*Statement sm=ct.createStatement();
     for (int i = 0; i < al.size(); i++) {
     CartBean cb = al.get(i);
     String sql="insert into orderdetail(orderid,goodid,nums) values('"+orderid+"','"+cb.getId()+"','"+cb.getBuyNum()+"')";
     sm.addBatch(sql);
    }
    sm.executeBatch();
    */
    
    }
                ps.executeBatch();
   }
   
  } catch (SQLException e) {
   System.out.println("order1beanpro 数据库操作异常");
   e.printStackTrace();
  }finally{
   closeRs();
  }
  return orderid;
    }

//该方法出现了4个异常,分别如下:

java.sql.SQLException: Before start of result set

用了if(rs!=null)应该为if(rs.next),通常用rs.last()也会出现这种异常。

java.sql.SQLException: Data truncated for column 'ispay' at row 1

数据的column用了enum(‘0’,’1’)类型,而在程序中操作时,用了setInt(1,0);应该用setString(1,”0”)

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

参数索引越界

java.sql.SQLException: Can not issue executeUpdate() for SELECTs

未处理的多个select语句

上面2个异常是通过jdbc批量执行sql语句造成的,正确的运用jdbc批量执行sql语句即可。

 

 

 

 

 

原创粉丝点击