Tweak converter for efficiency
This commit is contained in:
parent
2ff8e79766
commit
994e1be637
@ -4,6 +4,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
@ -73,6 +74,14 @@ public class Main
|
||||
while (!_complete)
|
||||
{
|
||||
convertGroup(_nextStart);
|
||||
try
|
||||
{
|
||||
Thread.sleep(5000);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
@ -97,13 +106,24 @@ public class Main
|
||||
accounts.add(rs.getInt("accountId"));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
_complete = true;
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (!accounts.isEmpty())
|
||||
{
|
||||
for (Integer accountId : accounts)
|
||||
{
|
||||
Map<Integer, Long> oldStats = new HashMap<>();
|
||||
Map<Integer, Long> newStats = new HashMap<>();
|
||||
try (Connection c = DBPool.getDataSource("ACCOUNT_PC").getConnection())
|
||||
{
|
||||
try (Statement s = c.createStatement();
|
||||
ResultSet rs = s.executeQuery("SELECT statId, value FROM accountStat WHERE accountId=" + accountId + ";")
|
||||
)
|
||||
@ -123,31 +143,59 @@ public class Main
|
||||
}
|
||||
}
|
||||
|
||||
try (PreparedStatement updateStatement = c.prepareStatement("UPDATE accountStatsAllTime SET value=value+? WHERE accountId=? AND statId=?;");
|
||||
PreparedStatement insertStatement = c.prepareStatement("INSERT INTO accountStatsAllTime (accountId, statId, value) VALUES (?, ?, ?);");
|
||||
PreparedStatement deleteStatement = c.prepareStatement("DELETE FROM accountStat WHERE accountId=?;");
|
||||
)
|
||||
{
|
||||
int updates = 0;
|
||||
int inserts = 0;
|
||||
|
||||
for (Entry<Integer, Long> oldEntry : oldStats.entrySet())
|
||||
{
|
||||
if (newStats.containsKey(oldEntry.getKey()))
|
||||
{
|
||||
if (newStats.get(oldEntry.getKey()) < oldEntry.getValue())
|
||||
{
|
||||
try (Statement s = c.createStatement())
|
||||
{
|
||||
Long diff = oldEntry.getValue() - newStats.get(oldEntry.getKey());
|
||||
s.execute("UPDATE accountStatsAllTime SET value=value+" + diff + " WHERE accountId=" + accountId + " AND statId=" + oldEntry.getKey() + ";");
|
||||
}
|
||||
updateStatement.setLong(1, diff);
|
||||
updateStatement.setInt(2, accountId);
|
||||
updateStatement.setInt(3, oldEntry.getKey());
|
||||
updateStatement.addBatch();
|
||||
updates++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
try (Statement s = c.createStatement())
|
||||
{
|
||||
s.execute("INSERT INTO accountStatsAllTime (accountId, statId, value) VALUES (" + accountId + ", " + oldEntry.getKey() + ", " + oldEntry.getValue() + ");");
|
||||
}
|
||||
insertStatement.setInt(1, accountId);
|
||||
insertStatement.setInt(2, oldEntry.getKey());
|
||||
insertStatement.setLong(3, oldEntry.getValue());
|
||||
insertStatement.addBatch();
|
||||
inserts++;
|
||||
}
|
||||
}
|
||||
|
||||
try (Statement s = c.createStatement())
|
||||
if (updates > 0)
|
||||
{
|
||||
s.execute("DELETE FROM accountStat WHERE accountId=" + accountId + ";");
|
||||
updateStatement.executeBatch();
|
||||
}
|
||||
|
||||
if (inserts > 0)
|
||||
{
|
||||
insertStatement.executeBatch();
|
||||
}
|
||||
|
||||
deleteStatement.setInt(1, accountId);
|
||||
deleteStatement.execute();
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
completeGroup(start);
|
||||
|
Loading…
Reference in New Issue
Block a user