2012-05-02 16 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都存在,我會在兩者中添加唯一的,以避免以後出現任何混淆。