向sqj数据库中插入一行数据。 但是数据库里却出现 数据完全相同的二行。请问代码是哪里错了呢??OrderNumber和AdminNumber 是2个textfield 的名字。就是将里面的数据插入数据库StockIn表中。action类////////////////////////////////////////////////////////////////////////////////////////////////
public class Stockinput extends ActionSupport {
@Override
public String execute() throws Exception {msg = "用户名或者密码错误";
// TODO Auto-generated method stub
if (isInvalid(OrderNumber) || isInvalid(AdminNumber)
{
msg = "入库信息不能为空!";
return INPUT;
}
String ps = new InputDAO().addInput(OrderNumber,AdminNumber);
return SUCCESS;
}
private boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
private String msg = "您好";
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
private String OrderNumber;    
                private String AdminNumber;

public String getOrderNumber() {
return OrderNumber;
}
public void setOrderNumber(String OrderNumber) {
this.OrderNumber = OrderNumber;
}
public String getAdminNumber() {
return AdminNumber;
}
public void setAdminNumber(String AdminNumber) {
this.AdminNumber = AdminNumber;
}DAO类///////////////////////////////////////////////////////////////////////////////////////////////
public String addInput(String OrderNumber, String AdminNumber) {
String sql = "INSERT INTO StockIn(OrderNumber,AdminNumber)VALUES(?,?)";
PreparedStatement pstat = null;
Connection conn = new DBHelper().getConn();
try {
pstat = conn.prepareStatement(sql);
pstat.setString(1,OrderNumber);
pstat.setString(2,AdminNumber);
pstat.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
return "false";
} finally {
try {
if (pstat != null)
pstat.close();
if (conn != null)
conn.close();
} catch (SQLException e) {e.printStackTrace();}
}
return "true";
}
public static void main(String[] args) {
InputDAO inputDAO = new InputDAO();
System.out.println("RegisterDAO.main()" + inputDAO.addInput("pp","pp");
}

解决方案 »

  1.   

    我的意思是数据库设了约束,你想插入两行 一样的都不行会抛异常如果说数据库没约束
    你的这种情况我只在 用AJAX的时候测出来过(异步)
      

  2.   

    在數據庫執行語句那寫個sysout或則設置斷點看看執行几次及SQL語句是執行的什么
      

  3.   


    主键怎么能重复呢?这(相同的行数据)在2000后期版本和oracle中即是不设置也不可能。别的数据库就不好说了。
      

  4.   

    设个主键吧,这样即使你的代码有问题,数据库的的ACID也会得到保证
      

  5.   

    因为你的
    String ps = new InputDAO().addInput(OrderNumber,AdminNumber); 
    System.out.println("RegisterDAO.main()" + inputDAO.addInput("pp","pp"); 
    这2句都执行一次的话   是插入了2个数据吧
      

  6.   


    17楼正解,你调用了两次addInput方法。
      

  7.   

    String ps = new InputDAO().addInput(OrderNumber,AdminNumber); 
    System.out.println("RegisterDAO.main()" + inputDAO.addInput("pp","pp"); 下面一句注释掉看看
      

  8.   

    是不是用了Junit4.0啊,这个不要用,改成3.8的,我曾经就是因为这个问题会同时执行!
      

  9.   

    多出来的一行在这里:System.out.println("RegisterDAO.main()" + inputDAO.addInput("pp","pp");