更新表中的行导致该行重复

时间:2019-07-20 10:46:38

标签: java mysql jdbc

当我尝试更新表中的特定行时,我面临一个奇怪的问题。 我正在使用java.sql库中的Connection类。以下是我的表格脚本:

    CREATE TABLE `crd_web_request` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` varchar(30) NOT NULL,
  `trn_notes` varchar(200) DEFAULT NULL,
  `trn_date` date NOT NULL,
  `amount` double(20,3) DEFAULT '0.000',
  `other_amount` double(20,3) DEFAULT '0.000',
  `card_fees` double(20,3) DEFAULT '0.000',
  `shipping_fees` double(20,3) DEFAULT '0.000',
  `sys_trtype_id` int(11) DEFAULT NULL,
  `crd_agent_mast_id` int(11) DEFAULT '0',
  `sys_phase_id` int(11) DEFAULT '0',
  `sys_user_id` int(11) DEFAULT NULL,
  `cust_aname` varchar(250) DEFAULT NULL,
  `cust_ename` varchar(250) DEFAULT NULL,
  `sys_nationality_id` int(11) DEFAULT NULL,
  `passport_id` varchar(45) DEFAULT NULL,
  `sys_doc_type_id` int(11) DEFAULT NULL,
  `cust_doc_id` varchar(45) DEFAULT NULL,
  `cust_email` varchar(250) DEFAULT NULL,
  `cust_address` varchar(250) DEFAULT NULL,
  `cust_tel` varchar(30) DEFAULT NULL,
  `card_holder_name` varchar(400) DEFAULT NULL,
  `status` int(1) NOT NULL DEFAULT '0',
  `cardType_ID` int(20) DEFAULT NULL,
  `sys_org` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`,`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=237 DEFAULT CHARSET=utf8;

以下是我更新表的Java代码:

Statement stmt = null;
        String query = "UPDATE smcpp16.crd_web_request SET status = 1 WHERE order_id = '" + orderId + "'";

        try {
            stmt = conn.createStatement();
            System.out.println(query);
            stmt.execute(query);

            stmt.close();
            conn.close();

        } catch (SQLException e) {
            e.printStackTrace();
}

我能弄清楚为什么会这样。每次执行update语句时,表都会插入一条具有与更新行相同值的新记录。你能帮忙吗?

2 个答案:

答案 0 :(得分:0)

我从这段代码中删除了连接的关闭,并且不再发生重复。 我刚刚删除了: conn.close();

答案 1 :(得分:0)

这是一种在finally块中关闭连接的做法,例如:

try{
     // update data
    }
catch{
      //catch exception
}
finally{
      //close connection
    conn.close();
}

让我知道这是否有帮助。