在Java中读取MySQL数据库的问题
我正在用PHP+MySQL和Java开发一个在线游戏来制作服务器 目前工作很好,但我有一个恼人的问题。我有一个简单的函数,可以从数据库中读取一些数据在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
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= ...