java
  • mysql
  • sql
  • 2013-09-24 80 views 0 likes 
    0

    我的Java項目我需要檢查一個表是否存在一行。 如果存在,我需要更新;如果不是,我需要創建它。 SQL語法要做到這一點應該是:語法在IF EXISTS語句中的SQL錯誤

    IF EXISTS(SELECT * FROM table1 WHERE column4='"+int4+"' AND column5='"+int5+"') " 
           +"BEGIN " 
    + "UPDATE table1" 
    + "SET column1='"+int1+"', column2='"+int2+"' " 
    + "WHERE column4='"+int4+"' and column5='"+int5+"' " 
    + "END " 
    + "ELSE" 
    + "INSERT INTO table1 (column1, column2, column4, column5, column3) " 
           + "VALUES ('" + int1 + "'," 
           + "'" + int2 + "'," 
           + "'" + int4 + "'," 
           + "'" + int5 + "'," 
           + "'" + int3 +"'); 
    

    其中int1, int2, int3, int4, int5是整數值。 好吧,如果我把這個代碼,我有一個SQL語法錯誤在我的Java編譯器:

    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM table1 WHERE column4='1' AND column5='0') BEGIN UPDATE' at line 1 
    

    但我can'y看到錯誤

    +0

    在控制檯中打印上面的行,然後在mysql中檢查它。您將會知道是否有任何錯誤 – SpringLearner

    +0

    您可以在函數或過程中使用控制語句,如'if' ** only **。 –

    +0

    謝謝。你會以哪種方式解決這個問題? – Bernheart

    回答

    3

    你,因爲在MySQL中,你可以」得到一個錯誤t使用除存儲例程(存儲過程,存儲函數,觸發器)以外的條件語句IF

    你需要的是所謂的UPSERT,你可以在MySQL中用INSERT INTO ... ON DUPLICATE KEY UPDATE來實現。爲了使其正常工作,您必須在column4column5上有UNIQUE INDEX。現在

    ALTER TABLE table1 ADD UNIQUE (column4, column5); 
    

    INSERT語句可能看起來像

    INSERT INTO table1 (column1, column2, column4, column5, column3) 
    VALUES (?, ?, ?, ?, ?) 
    ON DUPLICATE KEY UPDATE column1=VALUES(column1), column2=VALUES(column2); 
    

    這裏是SQLFiddle演示

    在一個側面說明:使用參數化查詢,而不是插值查詢字符串。我不是Java專家,但我確信它擁有一流的基礎設施。否則,你可以開放SQL注入。

    +0

    @Bernheart有幫助嗎?你的問題需要更多幫助嗎? – peterm

    +0

    嗨,謝謝你的幫助。編譯器會打印一個錯誤,突出顯示INSERT INTO table1(column1,column2,column4,column5,column3)'。對不起,遲到了,我有一個非常忙碌的一天! – Bernheart

    相關問題