有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在MySQL中设置默认值

因此,在我的Bukkit插件(用于Minecraft)中,我创建了一种连接到数据库的方法,并且我能够从数据库中检索信息(语句等),因此我不需要帮助,但我无法从数据库中检索令牌,它会连接所有内容以显示结果,但当我尝试查询时,会收到错误

@EventHandler
public void onJoin(PlayerJoinEvent event) throws SQLException {
    Player player = event.getPlayer();
    String name = player.getName();
    Statement statement = connection.createStatement();
    ResultSet res = statement.executeQuery("SELECT * FROM tokens WHERE PlayerName = '" + name + "';");
    res.next();

    int tokens = 0;

    if (res.getString("PlayerName") == null) {
        tokens = 0;
    } else {
        tokens = res.getInt("tokens");
    }

    player.sendMessage(tokens + "");
} 

Stacktrace:

org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:471) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.PlayerList.c(PlayerList.java:225) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.PlayerList.a(PlayerList.java:116) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.LoginListener.c(LoginListener.java:78) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.LoginListener.a(LoginListener.java:42) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:149) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:655) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:250) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:545) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
Caused by: java.sql.SQLException: Illegal operation on empty result set.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5616) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    at com.Twipply.DandD.DandD.onJoin(DandD.java:37) ~[?:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.6.0_65]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[?:1.6.0_65]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[?:1.6.0_65]
    at java.lang.reflect.Method.invoke(Method.java:597) ~[?:1.6.0_65]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.3-b3020jnks]
    ... 14 more

共 (1) 个答案

  1. # 1 楼答案

    您需要检查ResultSet.next()的返回值。如果没有更多行,则返回false

    如果SQL查询不包含任何匹配项,则不能在ResultSet上调用getString()或类似的方法。并不是说所有字段都是空的,而是根本没有结果