Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQL更新查询产生空指针异常_Java_Mysql_Sql_Nullpointerexception - Fatal编程技术网

Java MySQL更新查询产生空指针异常

Java MySQL更新查询产生空指针异常,java,mysql,sql,nullpointerexception,Java,Mysql,Sql,Nullpointerexception,我有一个MySQL更新查询,当用户键入/preference命令时运行,但是我的MySQLPreparedStatementtry/catch正在创建一个NullPointerException 这里是更新的堆栈跟踪: [19:28:19] [Server thread/WARN]: java.lang.NullPointerException [19:28:19] [Server thread/WARN]: at net.coded.playerdata.cmds.Pardon.onCo

我有一个MySQL更新查询,当用户键入
/preference
命令时运行,但是我的MySQL
PreparedStatement
try/catch正在创建一个
NullPointerException

这里是更新的堆栈跟踪:

[19:28:19] [Server thread/WARN]: java.lang.NullPointerException
[19:28:19] [Server thread/WARN]:    at net.coded.playerdata.cmds.Pardon.onCommand(Pardon.java:50)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:703)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(CraftServer.java:690)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:296)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:261)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628)
public class Pardon implements CommandExecutor {

    @SuppressWarnings("deprecation")
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {

        if (cmd.getName().equalsIgnoreCase("pardon")) {

            if (!sender.hasPermission("bukkit.command.unban.player") || (!sender.isOp())) {
                MessageManager.getInstance().severe(sender, ChatColor.RED + "You do not have permission to do that.");
                return true;
            }

            if (args.length == 0) {
                MessageManager.getInstance().severe(sender, "You must specify a player name!");
                return true;
            }

            if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
        }
        return true;
    }
}
if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
这是课程:

[19:28:19] [Server thread/WARN]: java.lang.NullPointerException
[19:28:19] [Server thread/WARN]:    at net.coded.playerdata.cmds.Pardon.onCommand(Pardon.java:50)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:703)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(CraftServer.java:690)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:296)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:261)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628)
public class Pardon implements CommandExecutor {

    @SuppressWarnings("deprecation")
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {

        if (cmd.getName().equalsIgnoreCase("pardon")) {

            if (!sender.hasPermission("bukkit.command.unban.player") || (!sender.isOp())) {
                MessageManager.getInstance().severe(sender, ChatColor.RED + "You do not have permission to do that.");
                return true;
            }

            if (args.length == 0) {
                MessageManager.getInstance().severe(sender, "You must specify a player name!");
                return true;
            }

            if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
        }
        return true;
    }
}
if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
以下是导致问题的if语句:

[19:28:19] [Server thread/WARN]: java.lang.NullPointerException
[19:28:19] [Server thread/WARN]:    at net.coded.playerdata.cmds.Pardon.onCommand(Pardon.java:50)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[19:28:19] [Server thread/WARN]:    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchCommand(CraftServer.java:703)
[19:28:19] [Server thread/WARN]:    at org.bukkit.craftbukkit.v1_7_R3.CraftServer.dispatchServerCommand(CraftServer.java:690)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.aB(DedicatedServer.java:296)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:261)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469)
[19:28:19] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628)
public class Pardon implements CommandExecutor {

    @SuppressWarnings("deprecation")
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {

        if (cmd.getName().equalsIgnoreCase("pardon")) {

            if (!sender.hasPermission("bukkit.command.unban.player") || (!sender.isOp())) {
                MessageManager.getInstance().severe(sender, ChatColor.RED + "You do not have permission to do that.");
                return true;
            }

            if (args.length == 0) {
                MessageManager.getInstance().severe(sender, "You must specify a player name!");
                return true;
            }

            if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
        }
        return true;
    }
}
if (args.length >= 1) {
                //Unban the player when they are offline
                Bukkit.getOfflinePlayer(args[0]).setBanned(false);
                Player toUnban = Bukkit.getPlayer(args[0]);

                // Update database
                try {
                    Class.forName(PlayerData.driver).newInstance();
                    Connection conn = DriverManager.getConnection(PlayerData.url + PlayerData.dbName, PlayerData.userName, PlayerData.password);

                    String query = "UPDATE playerdata SET banned = ?, ban_reason = ? WHERE uuid = ?";

                    // create the MySQL insert preparedstatement
                    PreparedStatement preparedStmt = conn.prepareStatement(query);
                    preparedStmt.setInt(1, 0);
                    preparedStmt.setString(2, null);
                    preparedStmt.setString(3, toUnban.getUniqueId().toString());

                    // execute the preparedstatement
                    preparedStmt.executeUpdate();
                    conn.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Player " + ChatColor.WHITE + args[0] + ChatColor.GREEN + " has been unbanned.");
                return true;
            }
我尝试为语句/查询创建一个单独的方法,添加一个
finally
子句来关闭连接,而不是在
try
中关闭连接。我还尝试在
try
之前声明
连接
准备语句
,以及查询字符串。我相当肯定这大部分代码都是有效的,因为我使用了MySQL和Java文档来编写这段代码。我肯定错过了什么。非常感谢您的帮助

它是
preparedStmt.setString(3,toUnban.getUniqueId().toString())

根据您的评论,似乎
toUnban
toUnban.getUniqueId()
是一个
null
值。同样添加调试语句并再次运行以检查:

preparedStmt.setString(2, null);
System.out.println("toUnban null? " + (toUnban==null));
System.out.println("toUnban.getUniqueId() null? " + (toUnban.getUniqueId()==null));
preparedStmt.setString(3, toUnban.getUniqueId().toString());

如果任一调试输出状态为
true
,请调查相应变量为什么为
null

任何stacktrace?(请更新问题!不要将堆栈跟踪作为注释发布。)看到了。哪一行是
preference.java:54
?Stacktrace并不总是必需的,只需指出哪一条语句产生了错误。@ADTC第54行似乎是:
conn.close()@swiftly你说的“似乎是”是什么意思?请查看源代码并检查第54行的语句。您应该能够看到左侧的行号(如果启用了此功能)或编辑器状态栏上的当前行号。另外,我非常怀疑它是
conn.close()
,因为
conn.prepareStatement
在此之前被调用了几行,所以
conn
不能
null