将多行发送到mysql数据库

时间:2012-08-27 22:13:38

标签: java mysql rows

所以我想将用户发送到一个mysql数据库,其中包含以下列:user,skill,time 现在,我希望它能够为同一个用户添加多行但有不同的时间等,我该怎么做?这是我将其发送到数据库的代码:

   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;

3 个答案:

答案 0 :(得分: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或任意数量的东西迭代循环。

答案 1 :(得分:0)

IIUC您希望为同一用户添加多行。

但是,您的代码中有两个位置阻止您执行此操作。

第一部分是在java:

if(!group.next()

它搜索该用户是否已有行,并且仅在没有行时执行INSERT。

但是,该代码可以防止发生SQL异常。在您的SQL模式中,user是表的主键,因此您不能使用同一用户插入两行。

你应该更改这两个地方(删除主键,删除!group.next),但首先检查应用程序的其余部分是否仍然可以使用属于同一用户的多行,因为它似乎有旨在防止这种情况超过允许它。

答案 2 :(得分:0)

如果您关闭AutoCommit,我认为您可以这样做。

  

自动提交模式意味着当语句完成时,该方法   自动在该语句上调用commit。自动提交   effect使每个SQL语句成为事务。提交发生在   语句完成或执行下一个语句,以其中任何一个为准   先到了。在返回ResultSet的语句的情况下,   当ResultSet的最后一行已经完成时语句完成   检索或结果集已明确关闭。

因此,在创建ResultSet实例后,请写下:

group.AutoCommit(False);

在AutoCommit之后编写SQL插入语句

完成后,并希望将它们作为一个块调用放在数据库中

group.commit();

Example about using AutoCommit