2012-08-27 83 views
0

所以我想給用戶發送到一個MySQL數據庫中的列:用戶,技術,時間 現在,我希望它能夠添加更多然後一行相同的用戶,但有不同的時間等,我將如何做到這一點?這是我爲它發送到數據庫代碼:發送多行MySQL數據庫

public static boolean recentActivity(Player paramPlayer){ 
    try { 
     Statement statement = con.createStatement(); 
     ResultSet group = statement.executeQuery("SELECT * FROM recentactivity WHERE user = '"+ paramPlayer.getDisplayName() + "'"); 
     if (!group.next() && !paramPlayer.levelTime.equals("")) 
       statement.execute("INSERT INTO `recentactivity`(`user`, `skill`, `time`) VALUES('"+ paramPlayer.getDisplayName() +"', '"+ paramPlayer.levelledSkill +"', '"+ paramPlayer.levelTime +"')"); 
    } catch (Exception localException) { 
     return false; 
    } 
    return true; 

} 然後我就這樣使用它:

java.util.Date dt = new java.util.Date(); 
    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); 
    String currentTime = sdf.format(dt); 
    player.levelledSkill = skill; 
    player.levelTime = ""+currentTime+""; 
    Hiscores.recentActivity(player); 

任何幫助?

模式:

CREATE TABLE IF NOT EXISTS recentactivity ( 
    user varchar(255) NOT NULL 
    , skill int(11) NOT NULL 
    , time varchar(255) NOT NULL 
    , PRIMARY KEY (user) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 
+1

對於聽起來像MySQL查詢問題的Java有很多。你能縮短/澄清一點嗎?我不確定你在問什麼。你可以放更多的行。什麼阻止你?你的SQL表的結構是什麼? – thatidiotguy

+0

你現在的做法到底是什麼問題? –

+0

它只爲玩家添加一行。 CREATE TABLE IF NOT EXISTS'recentactivity'( 'user' varchar(255)NOT NULL, 'skill' int(11)NOT NULL, 'time' varchar(255)NOT NULL, PRIMARY KEY('user') ENGINE = MyISAM DEFAULT CHARSET = latin1; –

回答

0

IIUC要添加多行相同用戶。

然而,你必須在你的代碼兩個地方是阻止你這樣做。

第一部分是在Java:!

如果(group.next()

它會搜索是否已經有該用戶的行,只執行如果沒有INSERT

然而,該代碼,以防止有發生SQL異常。在你的SQL模式,用戶是表的主鍵,所以你不能使用相同的用戶插入兩行。

你應該改變這些兩個地方(刪除主鍵,刪除e!group.next),但首先檢查應用程序的其餘部分是否仍然可以處理與同一用戶有關的多行,因爲它似乎是爲了防止這種情況而不是允許它。

1

documentation

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 
    [INTO] tbl_name [(col_name,...)] 
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),... 
    [ ON DUPLICATE KEY UPDATE 
     col_name=expr 
      [, col_name=expr] ... ] 

所以,忽略你不使用的東西...

INSERT INTO tbl_name (col_name,...) 
    VALUES | VALUE (expr,...),(...),... 

只要加上一個逗號和一組新的括號,您可以添加額外的記錄和惡作劇。例如:

"INSERT INTO `recentactivity`(`user`, `skill`, `time`) 
    VALUES('"+ paramPlayer.getDisplayName() +"', '"+ paramPlayer.levelledSkill +"', '"+ paramPlayer.levelTime +"')" 
    + ",('"+ paramPlayer2.getDisplayName() +"', '"+ paramPlayer2.levelledSkill +"', '"+ paramPlayer2.levelTime +"')" 

或者你可以使用StringBuilder或任意數量的東西遍歷一個循環。

0

我認爲你可以做到這一點,如果你關閉自動提交。

自動提交模式意味着當一個語句完成時,自動調用該語句的方法 。自動提交 的效果會使每個SQL語句成爲一個事務。 語句完成或執行下一條語句時,無論 至上發生的提交。在返回的ResultSet聲明的情況下,當ResultSet的最後一行已經檢索 的 語句完成或ResultSet中已明確關閉。

因此,您創建後的ResultSet的一個實例寫:自動提交

group.AutoCommit(False); 

寫你的SQL插入語句,你做了之後,並希望把他們的數據庫作爲一個塊通話

group.commit(); 

Example about using AutoCommit