操作数据库时,一个方法的多个异常
来源:互联网 发布:淘宝客服的连接地址 编辑:程序博客网 时间: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语句即可。
- 操作数据库时,一个方法的多个异常
- 应用服务器,灵活定义后台操作,一个数据库中操作,多个数据库中操作
- NHibernate操作多个数据库的
- 线程的加锁和解锁,防止多个用户操作一个方法
- 关于rails 多个项目公用一个SQLITE数据库的方法
- 从数据库中查询一个结果集和多个结果集的方法
- 一个系统中安装多个mysql数据库的方法,以及mysql数据库自动备份脚本的编写
- 多个数据库操作的事物合并配置+mysql数据库
- Hibernate访问多个数据库的方法
- Yii连接多个数据库的方法
- 一个action多个方法的调用
- 一个Action多个方法的调用
- 访问一个数据库服务器的多个数据库对象
- OpenSessionInViewFilter解决数据库操作表(一对多)延迟加载时session关闭的异常
- 数据库并发操作存在的异常情况
- sqlite数据库操作异常的问题
- 本地连接多个数据库操作
- Drupal:操作多个数据库
- wince 中虛擬地址與物理地址的換算(非程序)
- 十月反思 之 改进已有的代码
- SHLoadDIBitmap、LoadImage 函数有什么不同
- 详解如何使用SQL中文分词组件查询表记录
- 程序,我又回来啦
- 操作数据库时,一个方法的多个异常
- doxygen用法整理
- RGB565、RGB555、RGB888图像DIB显示
- 逗号操作的详谈
- B/S,C/S架构混合使用
- 使用SQL语句生成站点导航树形结构的实例
- VC中判断文件夹是否存在的方法(C/C++)
- 光脚丫学LINQ(031):开篇及一对多映射关系的再学习
- JDBC批量执行sql(转)