2012-05-02 17 views
0

我有插入一条记录到MySQL数据库作为波纹管的方法,如何在Java中没有重复运行mysql插入

public boolean addOrganization(OrganizationDTO organizationDTO) { 
    Connection con = null; 
    try { 
     String insertOrganizationSQL = "INSERT INTO organizations (org_id, org_name) VALUES(?, ?)"; 
     con = JDBCConnectionPool.getInstance().checkOut(); 
     PreparedStatement insertOrgPS = (PreparedStatement) con.prepareStatement(insertOrganizationSQL); 
     insertOrgPS.setString(1, organizationDTO.getOrg_id()); 
     insertOrgPS.execute(); 
     return true; 
    } catch (Exception e) { 
     JDBCConnectionPool.getInstance().checkIn(con); 
     logger.error(e.getLocalizedMessage()); 
     e.printStackTrace(); 
     return false; 
    } finally { 
     JDBCConnectionPool.getInstance().checkIn(con); 
    } 
} 

数据库表,

CREATE TABLE `organizations` (
    `org_id` varchar(5) NOT NULL, 
    `org_name` varchar(100) DEFAULT NULL, 
    `sys_dat_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `user` varchar(100) NOT NULL, 
    PRIMARY KEY (`org_id`) 
) 

我需要的是,当我插入一条新记录,如果这是一个重复的退出方法而不尝试插入并通知用户它是重复记录。是否可以在插入之前不写另一种方法来搜索记录?

+2

您可以执行INSERT IGNORE,然后检查有多少行受到影响。如果它是零,那是重复的。 – Eli

+0

将唯一键添加到适当的列中? –

+0

我发现从[这里]我的问题的解决方案[1] qestion [1]:http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-关键更新 – Harsha

回答

0

我会为您的表添加一个UNIQUE约束。例如,如果ORG_NAME必须是唯一的:

ALTER TABLE organizations ADD UNIQUE (org_name); 

然后观察所返回什么,当你尝试插入通过Java重复记录。添加代码来检查这一点,如果发生,请将消息显示给用户。

Here是ALTER TABLE的参考文档。

0

这是正确的,Alter表肯定会有所帮助。

就你的情况而言,假设org_id和org_name都存在,我会在两者中添加唯一的,以避免以后出现任何混淆。