0

したがって、ユーザー、スキル、時間の列を含む 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;
4

3 に答える 3

1

ドキュメントから:

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 などを使用してループを反復処理することもできます。

于 2012-08-27T22:21:42.420 に答える
0

AutoCommit をオフにすればできると思います。

自動コミット モードとは、ステートメントが完了すると、そのステートメントに対して commit メソッドが自動的に呼び出されることを意味します。実際の自動コミットは、すべての SQL ステートメントをトランザクションにします。ステートメントが完了するか、次のステートメントが実行されるかのいずれか早い方で、コミットが発生します。ResultSet を返すステートメントの場合、ResultSet の最後の行が取得されるか、ResultSet が明示的に閉じられると、ステートメントは完了します。

したがって、ResultSet のインスタンスを作成した後、次のように記述します。

group.AutoCommit(False);

AutoCommit の後に SQL Inserts ステートメントを記述します。

あなたが行った後、それらをワンブロックコールとしてデータベースに入れたい

group.commit();

AutoCommit の使用例

于 2012-08-27T22:37:39.250 に答える
0

同じユーザーに複数の行を追加したい IIUC。

ただし、コード内にこれを実行できない場所が 2 つあります。

最初の部分は Java にあります:

if (!group.next()

そのユーザーの行がすでに存在するかどうかを検索し、存在しない場合にのみ INSERT を実行します。

ただし、そのコードは、SQL 例外の発生を防ぐために存在します。SQL スキーマでは、user がテーブルの主キーであるため、同じユーザーで 2 つの行を挿入することはできません。

これらの 2 つの場所を変更する必要があります (主キーを削除し、!group.next を削除します)。ただし、最初に、アプリケーションの残りの部分が同じユーザーに関連する複数の行で引き続き機能するかどうかを確認してください。その状況を許可するよりも、防止してください。

于 2012-08-27T22:23:31.323 に答える