【问题标题】:MySQL Java Bukkit Plugin - Select from databaseMySQL Java Bukkit 插件 - 从数据库中选择
【发布时间】:2015-07-10 22:59:32
【问题描述】:

当我尝试从 MySQL 获取消息时,我的 Bukkit 插件出现问题。我有一个名为“ReportsLog”的表,其中存储了“SenderName”和“Message”。

我认为Bukkit知识不是解决这个问题的必要条件,主要错误是:

     [01:44:19 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command          'areport' in plugin StaffTrainer v1.0

这是错误:

 [01:44:19 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command          'areport' in plugin StaffTrainer v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spi
got.jar:git-Spigot-f928e7a-e91aed8]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
1) ~[spigot.jar:git-Spigot-f928e7a-e91aed8]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServe
r.java:642) ~[spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerCon
nection.java:1135) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java
:970) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java
:45) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java
:1) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:1
3) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
?:1.8.0_45]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_45]
    at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:19) [spig
ot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:7
18) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
67) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
57) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
:560) [spigot.jar:git-Spigot-f928e7a-e91aed8]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
Caused by: java.lang.NullPointerException
    at code.katzuno.StaffTrainer.onCommand(StaffTrainer.java:80) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
got.jar:git-Spigot-f928e7a-e91aed8]
    ... 15 more

这是第 80 行的代码(有错误的代码):

            String ReportSender = args[0];
            String mesaj = mess.getMessage(ReportSender);

很可能错误出在函数 getMessage 中。这是function getMessage()的代码

   public String getMessage(String PlayerName) {
        String mesaj = " ";
        if (playerExists(PlayerName)) {
            try {
                ResultSet rs = StaffTrainer.mysql.query("SELECT * FROM ReportsLog WHERE SenderName= '" + PlayerName + "'");
                if ( (!rs.next())  || (String.valueOf(rs.getString("Message")) == null) );
                mesaj = rs.getString("Message");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } else {
            createPlayer(PlayerName);
            getMessage(PlayerName);
        }
        return mesaj;
    }

【问题讨论】:

  • 它是由一个空指针引起的......找出哪个值是空的,深入挖掘是什么导致它为空。 StaffTrainer.mysql 字段是否已初始化?
  • 这是我在主课(StaffTrainer)中关于mysql(MySQL.java 类)的: public static MySQL mysql;
  • 我没有其他初始化程序。
  • 所以这个值永远不会被赋值,因此它是空的?发现问题了吗?
  • 我应该初始化什么或如何初始化像“StaffTrainer.mysql”这样的东西。或者我应该初始化'public static MySQL mysql;' ?如果我应该初始化 mysql 变量,我可以用什么初始化那种类型的 var?

标签: java mysql syntax bukkit


【解决方案1】:

args 变量为空。它说空指针异常来自该行,并且您尝试访问值的唯一位置是来自该数组。您需要像这样事先进行检查:

if (args != null) {
    ...
}

防止异常发生。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2011-05-17
    • 2013-03-04
    相关资源
    最近更新 更多