@@ -61,21 +61,31 @@ public String lastServerOf(final String playerName) {
6161
6262 public void setLastServer (final String playerName , final String server ) {
6363 try (final Connection connection = this .source .getConnection ();
64- final PreparedStatement statement = connection .prepareStatement (INSERT_DATA )
64+ final PreparedStatement statement = fromPlayer (playerName , connection );
65+ final ResultSet rs = statement .executeQuery ()
6566 ) {
66- statement .setString (1 , playerName );
67- statement .setString (2 , server );
68- statement .executeUpdate ();
69- } catch (final SQLException e ) {
70- try (final Connection connection = this .source .getConnection ();
71- final PreparedStatement statement = connection .prepareStatement (UPDATE_SERVER )
72- ) {
73- statement .setString (1 , server );
74- statement .setString (2 , playerName );
75- statement .executeUpdate ();
76- } catch (SQLException ex ) {
77- this .logger .warn ("An error occurred updating last server information of player {}" , playerName , ex );
67+ if (rs .next ()) {
68+ // Already has server data
69+ final String serverFromDB = rs .getString ("server" );
70+ // If the last player server is the same in the database, the UPDATE sequence is avoided
71+ if (server .equalsIgnoreCase (serverFromDB )) {
72+ return ;
73+ }
74+ try (final PreparedStatement updateStatement = connection .prepareStatement (UPDATE_SERVER )) {
75+ updateStatement .setString (1 , server );
76+ updateStatement .setString (2 , playerName );
77+ updateStatement .executeUpdate ();
78+ }
79+ } else {
80+ // Insert new server data
81+ try (final PreparedStatement insertStatement = connection .prepareStatement (INSERT_DATA )) {
82+ insertStatement .setString (1 , playerName );
83+ insertStatement .setString (2 , server );
84+ insertStatement .executeUpdate ();
85+ }
7886 }
87+ } catch (final SQLException e ) {
88+ this .logger .warn ("An error occurred updating last server information of player {}" , playerName , e );
7989 }
8090 }
8191
0 commit comments