我正在开发一个网络游戏,用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;
}
public static synchronized ResultSet query(String query) throws SQLException {
//create a new statment to execute the query
Statement statment = connection.createStatement();
//Execute the query
ResultSet result = statment.executeQuery(query);
//Wait a bit (If the query is too long...
statment.setQueryTimeout(300);
//And return the result
return result;
}
该功能运行完美,现在假设我们打开服务器并读取数据库,玩家有一把“剑”作为武器,但他在商店购买了一把新剑,数据库正确更新了它并在服务器中。我再次运行该函数,但始终返回第一个值,除非重新启动服务器。我对其他函数做了同样的事情,但从未遇到过这个问题,Java 是否有类似缓存的东西会引发这个问题?
最佳答案
确保MySQL的内部缓存未被使用。您可以通过添加SQL_NO_CACHE
来做到这一点:
SELECT SQL_NO_CACHE * FROM players WHERE playerID= ...
关于java - Java读取MySQL数据库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106711/