我正在开发一个使用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有没有像缓存一样引发这个问题?
答案 0 :(得分:0)
确保未使用MySQL内部缓存。您可以通过添加SQL_NO_CACHE
:
SELECT SQL_NO_CACHE * FROM players WHERE playerID= ...