Java中使用JDBC实现数据库服务器的持续更新,同时保持RAM消耗不增加的方法
P粉323224129
P粉323224129 2023-09-07 20:10:29
0
1
428

我在JavaFX中编写了一个格斗游戏,使用JDBC将信息更新到MySQL数据库中。如果不重复连续执行,从数据库服务器获取基本信息的大多数任务都能正常工作。问题出现在我需要程序不断更新对手的信息,比如游戏中的位置、等级、伤害等。我必须不断向服务器发送select命令,这会增加运行这些命令的线程使用的RAM。

void startUpdatingOpponentInfo() {
    Thread thread = new Thread(() -> {
        while (matchID != -1) {
            String query = String.format("select * from matchDetails where matchID = %d and userID = %d", matchID, opponentID);
            try {
                ResultSet resultSet = sqlConnection.getDataQuery(query);
                while (resultSet.next()) {
                    double opponentX = resultSet.getDouble("xPos");
                    double opponentY = resultSet.getDouble("YPos");
                    if (opponentX != -1 && opponentY != -1)
                        opponent.move(canvas, new Position(opponentX, opponentY));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    });
}

  public ResultSet getDataQuery(String query) {
    Statement statement;
    ResultSet resultSet = null;
    try {
        statement = connection.createStatement();
        resultSet = statement.executeQuery(query);
    } catch (SQLException e) {
        System.out.println(query);
        e.printStackTrace();
    }
    return resultSet;
}

我尝试搜索了一些方法,找到了一个非常有用的方法。在每个select之后,我会让线程休眠一段时间,然后再进行select。这种方式显着提高了性能,RAM的消耗量保持稳定。然而,对于需要始终刷新的查询信息来说,这种方法并不适用,因为“select”线程的短暂休眠仍然会导致RAM消耗较高。是否有任何有用的方法解决这个问题,让我的游戏直接连接到数据库服务器,而不经过中间游戏服务器。

P粉323224129
P粉323224129

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!