在Java中读取MySQL数据库的问题

在Java中读取MySQL数据库的问题,java,mysql,jdbc,Java,Mysql,Jdbc,我正在用PHP+MySQL和Java开发一个在线游戏来制作服务器 目前工作很好,但我有一个恼人的问题。我有一个简单的函数,可以从数据库中读取一些数据 public static String loadWeapon(int playerID) { query = "SELECT * FROM players WHERE playerID=" + playerID; try { ResultSet result = query(query); whil

我正在用PHP+MySQL和Java开发一个在线游戏来制作服务器

目前工作很好,但我有一个恼人的问题。我有一个简单的函数,可以从数据库中读取一些数据

public static String loadWeapon(int playerID) {
    query = "SELECT * FROM players WHERE playerID=" + playerID;
    try {
        ResultSet result = query(query);
        while(result.next()) {
            return result.getString("weapon");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}


该功能运行完美,现在想象一下,我们打开服务器,读取数据库,玩家有一把“剑”作为武器,但他在商店里买了一把新剑,数据库在服务器上正确更新。我再次运行该函数,但始终返回第一个值,除非我重新启动服务器。我对其他函数也做了同样的操作,但从来没有遇到过这个问题,Java是否有类似于引发这个问题的缓存?

确保不使用MySQLs内部缓存。您可以通过添加
SQL\u NO\u缓存来实现这一点:

SELECT SQL_NO_CACHE * FROM players WHERE playerID= ...

您可以在“while”循环中“return”。它应该做什么呢?把数据写在纸上,然后手工处理你的算法。您将看到显而易见的结果。此外,
ResultSet
需要打开连接。您不能仅从方法返回
ResultSet
(它也是不可序列化的)。使用其他集合存储结果并返回集合。您真的需要
query()
方法上的
synchronized
吗?但是如果数据库的值发生变化,为什么它会再次读取旧的值呢?
SELECT SQL_NO_CACHE * FROM players WHERE playerID= ...