[MySQL] PreparedStatement NullPointerException

Discussion in 'Plugin Development' started by Zandor300, May 24, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    Zandor300

    Hi, i am getting an error on this:
    Code:java
    1. PreparedStatement sql = connection.prepareStatement("SELECT * FROM `" + table + "` WHERE uuid=?;");

    And i don't know why...
    This is the "table" variable:
    Code:java
    1. private static String table = "flags";

    This is the whole code of that block:
    Code:java
    1. public synchronized static boolean dbContainsPlayer(Player player) {
    2. try {
    3. PreparedStatement sql = connection
    4. .prepareStatement("SELECT * FROM `" + table
    5. + "` WHERE uuid=?;");
    6. sql.setString(1, player.getUniqueId().toString());
    7. ResultSet resultSet = sql.executeQuery();
    8. boolean containsPlayer = resultSet.next();
    9.  
    10. sql.close();
    11. resultSet.close();
    12. return containsPlayer;
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. return false;
    16. }
    17. }

    Error log:
    Code:
    [12:18:09] [Server thread/WARN]: java.lang.NullPointerException
    [12:18:09] [Server thread/WARN]:    at com.zandor300.defendyourteam.handlers.MySQLHandler.dbContainsPlayer(MySQLHandler.java:57)
    [12:18:09] [Server thread/WARN]:    at com.zandor300.defendyourteam.handlers.MySQLHandler.addPlayer(MySQLHandler.java:103)
    [12:18:09] [Server thread/WARN]:    at com.zandor300.defendyourteam.listeners.player.PlayerJoin.onPlayerJoin(PlayerJoin.java:28)
    [12:18:09] [Server thread/WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [12:18:09] [Server thread/WARN]:    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    [12:18:09] [Server thread/WARN]:    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [12:18:09] [Server thread/WARN]:    at java.lang.reflect.Method.invoke(Method.java:606)
    [12:18:09] [Server thread/WARN]:    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292)
    [12:18:09] [Server thread/WARN]:    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    [12:18:09] [Server thread/WARN]:    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
    [12:18:09] [Server thread/WARN]:    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502)
    [12:18:09] [Server thread/WARN]:    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.PlayerList.c(PlayerList.java:251)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.PlayerList.a(PlayerList.java:138)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.LoginListener.c(LoginListener.java:105)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.LoginListener.a(LoginListener.java:43)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:183)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.ServerConnection.c(ServerConnection.java:81)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:713)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:283)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:576)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:482)
    [12:18:09] [Server thread/WARN]:    at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628)
     
  2. Offline

    Theodossis

    When you close the sql connection, do you reopen it?
     
  3. Offline

    Zandor300

    I close my connection when i disable the plugin... And i don't reopen it...

    bump

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 8, 2016
  4. Offline

    Zandor300

    I've changed it a bit but still getting the same error:
    Code:java
    1. public synchronized static boolean dbContainsPlayer(Player player) {
    2. try {
    3. PreparedStatement sql = connection
    4. .prepareStatement("SELECT * FROM `" + table
    5. + "` WHERE uuid=`"
    6. + player.getUniqueId().toString() + "`;");
    7. ResultSet resultSet = sql.executeQuery();
    8. boolean containsPlayer = resultSet.next();
    9.  
    10. sql.close();
    11. resultSet.close();
    12. return containsPlayer;
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. return false;
    16. }
    17. }
     
  5. Table being null wouldn't cause this.

    Your connection variable has not been set probably.

    Can't say without the full class, also don't bump a thread so quickly
     
  6. Offline

    Zandor300

    Code:java
    1. private static String host = "...";
    2. private static String port = "3306";
    3. private static String db = "...";
    4. private static String table = "flags";
    5. private static String user = "...";
    6. private static String pass = "...";
    7.  
    8. public synchronized static void closeConnection() {
    9. try {
    10. if (connection != null || !connection.isClosed()) {
    11. connection.close();
    12. plugin.log.info(plugin.prefixc + "Closed MySQL connection!");
    13.  
    14. }
    15. } catch (SQLException e) {
    16. e.printStackTrace();
    17. }
    18. }
    19.  
    20. public synchronized static void openConnection() {
    21. try {
    22. connection = DriverManager.getConnection("jdbc:mysql://" + host
    23. + ":" + port + "/" + db, user, pass);
    24. plugin.log.info(plugin.prefixc + "Opened MySQL connection!");
    25. } catch (Exception e) {
    26. e.printStackTrace();
    27. }
    28. }
    29.  
    30. public synchronized static boolean dbContainsPlayer(Player player) {
    31. try {
    32. PreparedStatement sql = connection
    33. .prepareStatement("SELECT * FROM `" + table
    34. + "` WHERE uuid=`"
    35. + player.getUniqueId().toString() + "`;");
    36. ResultSet resultSet = sql.executeQuery();
    37. boolean containsPlayer = resultSet.next();
    38.  
    39. sql.close();
    40. resultSet.close();
    41. return containsPlayer;
    42. } catch (Exception e) {
    43. e.printStackTrace();
    44. return false;
    45. }
    46. }


    I have removed some variables... Just so you know

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 8, 2016
  7. Offline

    Rocoty

    And where in your code are you calling openConnection();?
     
  8. Offline

    ImDeJay

    Your connection is null.
    you need test the connection before you try to use it. if the connection is null, re-open it.


    Code:java
    1.  
    2. public synchronized static boolean dbContainsPlayer(Player player) {
    3.  
    4. if(connection == null){
    5.  
    6. openConnection();
    7.  
    8. }
    9. try {
    10. PreparedStatement sql = connection
    11. .prepareStatement("SELECT * FROM `" + table
    12. + "` WHERE uuid=?;");
    13. sql.setString(1, player.getUniqueId().toString());
    14. ResultSet resultSet = sql.executeQuery();
    15. boolean containsPlayer = resultSet.next();
    16.  
    17. sql.close();
    18. resultSet.close();
    19. return containsPlayer;
    20. } catch (Exception e) {
    21. e.printStackTrace();
    22. return false;
    23. }
    24. }
     
  9. Offline

    Zandor300

    Thanks! That solved the error!
     
Thread Status:
Not open for further replies.

Share This Page