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

问题描述 投票:-1回答:2

当我尝试更新表中的特定行时,我遇到了一个奇怪的问题。我正在使用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语句时,表都会插入一条具有与更新行相同值的新记录。您能帮忙吗?

java mysql jdbc
2个回答
0
投票

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


0
投票

这是在finally块中关闭连接的做法,类似这样:

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

让我知道是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.