2014-07-24 3 views
3

MySQL 지원이 포함 된 Bukkit 플러그인을 만들려고합니다. 내가 만들고있는 플러그인은 에코 플러그인이므로 MySQL 테이블에 모든 플레이어의 이름을 넣어야합니다. PlayerJoinEvent를 사용하여 아직 등록되지 않은 플레이어를 데이터베이스에 등록합니다. 플러그인을 활성화하면 오류가 발생하지 않지만 플레이어가 조인 할 때 (PlayerJoinEvent가 실행될 때) 오류가 나타납니다.MySQL - MySQL - MySQL 데이터베이스에 연결하는 동안 오류가 발생했습니다.

는 Connect() 메소드가 나는 MySQLHandler 클래스

[19:07:54 INFO]: UUID of player behhhans is da772a82-cdc9-3b79-962b-4cdc7623dd7a 

[19:07:54 ERROR]: Could not pass event PlayerLoginEvent to Tokeconomy v1.0 
org.bukkit.event.EventException 
     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja 
va:294) ~[spigot.jar:git-Spigot-1523] 
     at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav 
a:62) ~[spigot.jar:git-Spigot-1523] 
     at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredLi 
stener.java:30) ~[spigot.jar:git-Spigot-1523] 
     at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j 
ava:502) [spigot.jar:git-Spigot-1523] 
     at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j 
ava:487) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.PlayerList.attemptLogin(PlayerList.java: 
400) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.LoginListener.c(LoginListener.java:97) [ 
spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.LoginListener.a(LoginListener.java:43) [ 
spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:187 
) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.ServerConnection.c(ServerConnection.java 
:81) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:7 
20) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:2 
83) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:5 
83) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java 
:489) [spigot.jar:git-Spigot-1523] 
     at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:6 
28) [spigot.jar:git-Spigot-1523] 
Caused by: java.lang.NullPointerException 
     at me.bramhaag.Tokeconomy.MySQLHandler.createAccount(MySQLHandler.java:1 
02) ~[?:?] 
     at me.bramhaag.Tokeconomy.EventListener.onLogin(EventListener.java:27) ~ 
[?:?] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0 
_65] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0 
_65] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1 
.7.0_65] 
     at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_65] 
     at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja 
va:292) ~[spigot.jar:git-Spigot-1523] 
     ... 14 more 
[19:07:54 INFO]: behhhans[/127.0.0.1:57702] logged in with entity id 6067 at ([w 
orld] 710.6999999880791, 41.0, 309.4669731960532) 

를 받고 오전 onEnable()


오류에 호출되는

:

package me.bramhaag.Tokeconomy; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
public class MySQLHandler { 

    private Main plugin; 

    public MySQLHandler (Main plugin) 
    { 
     this.plugin = plugin; 
    } 


    Connection conn = null; 

    private String host, port, user, password, database; 

    public MySQLHandler(String host, String port, String database, String user, String password) { 
     this.host = host; this.port = port; this.user = user; this.password = password; this.database = database; 
    } 

    public void connect() { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      conn = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database + "?user=" + user + "&password=" + password); 

      conn.createStatement().execute("CREATE TABLE IF NOT EXISTS `tokens` (`Name` varchar(32), `amount` int)"); 
     } catch (ClassNotFoundException e) { e.printStackTrace(); 
     } catch (SQLException e) { e.printStackTrace(); } 
    } 


    public void createAccount(String player) throws SQLException { 


      try (PreparedStatement pstat = conn.prepareStatement("SELECT 1 FROM tokens WHERE name=? LIMIT 1"))// Error line (Line 102)! 
      { 
       pstat.setString(1, player); 

       try (ResultSet rs = pstat.executeQuery()) 
       { 
        if (!rs.next()) 
        { 
         pstat.executeUpdate("UPDATE `tokens` (`Name`,`amount`) VALUE ('" + player + "', '" + 0 + "')"); 
        } 
       } 
      } 
    } 

    public void updateLast(String player) { 
     try { 
      conn.createStatement().execute("UPDATE `bsp` SET `lastlogin` = '"+ String.valueOf(System.currentTimeMillis()) +"'"); 
     } catch (SQLException e) { e.printStackTrace(); } 
    } 

    public int getTokens(String pname) throws SQLException { 

     ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM `tokens` WHERE `Name`='"+ pname + "';"); 
     if(!rs.next()) { 
      return 0; 
     } 
     return rs.getInt("amount"); 
    } 

    public void updatePlayerAdd(String pname, double amount) throws SQLException { 

     int tokens = this.getTokens(pname); 
     if(tokens!=0) { 
      conn.createStatement().executeUpdate("UPDATE `tokens` SET `amount`='"+ (tokens + amount)+"' WHERE `Name`='"+ pname + "';"); 
     } else { 
      conn.createStatement().executeUpdate("INSERT INTO `tokens` (`Name`, `amount`) VALUES('" + pname +",'1');"); 
     } 
    } 

    public void updatePlayerReject(String pname, double amount) throws SQLException { 

     int tokens = this.getTokens(pname); 
     if(tokens!=0) { 
      conn.createStatement().executeUpdate("UPDATE `tokens` SET `amount`='"+ (tokens - amount)+"' WHERE `Name`='"+ pname + "';"); 
     } else { 
      conn.createStatement().executeUpdate("INSRT INTO `tokens` (`Name`, `amount`) VALUES('" + pname +",'1');"); 
     } 
    } 

    public void updatePlayerSet(String pname, double amount) throws SQLException { 

     int tokens = this.getTokens(pname); 
     if(tokens!=0) { 
      conn.createStatement().executeUpdate("UPDATE `tokens` SET `amount`='"+ (amount)+"' WHERE `Name`='"+ pname + "';"); 
     } else { 
      conn.createStatement().executeUpdate("INSRT INTO `tokens` (`Name`, `amount`) VALUES('" + pname +",'1');"); 
     } 
    } 

} 

이벤트 핸들러 클래스 :

package me.bramhaag.Tokeconomy; 

import java.sql.SQLException; 

import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.player.PlayerJoinEvent; 

public class EventListener implements Listener { 

    private Main plugin; 

    public EventListener (Main plugin) 
    { 
     this.plugin = plugin; 
    } 

    MySQLHandler mysql = new MySQLHandler(plugin); 


    @EventHandler 
    public void onJoin(PlayerJoinEvent e) throws SQLException { 
     Player p = e.getPlayer(); 
     String name = p.getName(); 

     mysql.createAccount(name); 

    } 

} 

누군가 내 코드를보고 오류를 찾을 수 있습니까?

+0

은 분명히 * 라 연결 *은 null입니다. * onEnable() * 및 * onJoin() * 메소드에서 * MySQLHandler *의 다른 인스턴스를 사용했을 수 있습니다. – agad

+0

어떻게 해결할 수 있습니까? – thijmen321

+0

MySQLHandler가 싱글 톤이어야합니다 – agad

답변

1

나는 것은

덕분에 당신은이를 사용할 수 있습니다

DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); 
관련 문제