Mysql 在Bukkit/spiget插件中实现SQL

Mysql 在Bukkit/spiget插件中实现SQL,mysql,sql,minecraft,bukkit,Mysql,Sql,Minecraft,Bukkit,首先,我是这些论坛的新手,所以如果(或当)我在某个地方犯了一个小错误,我很抱歉 在不久前学习了HTML和CSS之后,我最近开始学习Java。 我是Minecraft服务器网络的开发人员,我制作的一个插件可以启用/color[颜色代码或颜色名称] 现在,我已经建立了一个MySQL数据库,在其中我创建了一个表,其中UUID和Color是变量。 我一直在努力让插件连接到数据库并存储/检索他选择的玩家姓名的颜色,因为它需要跨多个服务器工作 我想对插件进行优化,这样它只在需要时连接,并与SQL数据库断开连

首先,我是这些论坛的新手,所以如果(或当)我在某个地方犯了一个小错误,我很抱歉

在不久前学习了HTML和CSS之后,我最近开始学习Java。 我是Minecraft服务器网络的开发人员,我制作的一个插件可以启用/color[颜色代码或颜色名称]

现在,我已经建立了一个MySQL数据库,在其中我创建了一个表,其中UUID和Color是变量。 我一直在努力让插件连接到数据库并存储/检索他选择的玩家姓名的颜色,因为它需要跨多个服务器工作

我想对插件进行优化,这样它只在需要时连接,并与SQL数据库断开连接,这样就不会有太多的延迟。 这是我到目前为止的代码:

package nl.live.partyblaze.pbcolor;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public final class PBColor extends JavaPlugin
{
    @Override
    public void onEnable()
    {
        getLogger().info("[PBColor] onEnable has been invoked!");
    }

    @Override
    public void onDisable()
    {
        getLogger().info("[PBColor] onDisable has been invoked!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        if (cmd.getName().equalsIgnoreCase("color"))
        {
            if (args.length == 1)
            {
                if (args[0].equalsIgnoreCase("a"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GREEN + displ);
                    sender.sendMessage("§aYour name has been set to green!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("green"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GREEN + displ);
                    sender.sendMessage("§aYour name has been set to green!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("b"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.AQUA + displ);
                    sender.sendMessage("§bYour name has been set to aqua!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("aqua"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.AQUA + displ);
                    sender.sendMessage("§bYour name has been set to aqua!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("c"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.RED + displ);
                    sender.sendMessage("§cYour name has been set to red!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("red"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.RED + displ);
                    sender.sendMessage("§cYour name has been set to red!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("d"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.LIGHT_PURPLE + displ);
                    sender.sendMessage("§dYour name has been set to light purple!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("lightpurple"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.LIGHT_PURPLE + displ);
                    sender.sendMessage("§dYour name has been set to light purple!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("e"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.YELLOW + displ);
                    sender.sendMessage("§eYour name has been set to yellow!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("yellow"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.YELLOW + displ);
                    sender.sendMessage("§eYour name has been set to yellow!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("f"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.WHITE + displ);
                    sender.sendMessage("§fYour name has been set to white!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("white"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.WHITE + displ);
                    sender.sendMessage("§fYour name has been set to white!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("1"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_BLUE + displ);
                    sender.sendMessage("§1Your name has been set to dark blue!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkblue"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_BLUE + displ);
                    sender.sendMessage("§1Your name has been set to dark blue!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("2"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_GREEN + displ);
                    sender.sendMessage("§2Your name has been set to dark green!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkgreen"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_GREEN + displ);
                    sender.sendMessage("§2Your name has been set to dark green!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("3"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_AQUA + displ);
                    sender.sendMessage("§3Your name has been set to dark aqua!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkaqua"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_AQUA + displ);
                    sender.sendMessage("§3Your name has been set to dark aqua!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("4"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_RED + displ);
                    sender.sendMessage("§4Your name has been set to dark red!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkred"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_RED + displ);
                    sender.sendMessage("§4Your name has been set to dark red!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("5"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_PURPLE + displ);
                    sender.sendMessage("§5Your name has been set to dark purple!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkpurple"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_PURPLE + displ);
                    sender.sendMessage("§5Your name has been set to dark purple!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("6"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GOLD + displ);
                    sender.sendMessage("§6Your name has been set to gold!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("gold"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GOLD + displ);
                    sender.sendMessage("§6Your name has been set to gold!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("7"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GRAY + displ);
                    sender.sendMessage("§7Your name has been set to gray!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("gray"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.GRAY + displ);
                    sender.sendMessage("§7Your name has been set to gray!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("8"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_GRAY + displ);
                    sender.sendMessage("§8Your name has been set to dark gray!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("darkgray"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.DARK_GRAY + displ);
                    sender.sendMessage("§8Your name has been set to dark gray!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("9"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.BLUE + displ);
                    sender.sendMessage("§9Your name has been set to blue!");
                    return true;
                }

                if (args[0].equalsIgnoreCase("blue"))
                {
                    String displ = sender.getName();
                    Player p = (Player) sender;
                    p.setDisplayName(ChatColor.BLUE + displ);
                    sender.sendMessage("§9Your name has been set to blue!");
                    return true;
                }
            }
        }
        return false; 
    }
}

提前谢谢

在我的插件中,我使用了这个类,我将其命名为
MySQL

包me.Nightfighter001.Minepedia-System.Methoden;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入org.bukkit.bukkit;
导入org.bukkit.command.ConsoleCommandSender;
公共类MySQL{
公共静态字符串host=“minepedia.eu”;
公共静态字符串端口=“3306”;
公共静态字符串数据库=“GlobalData”;
公共静态字符串username=“*******”;
公共静态字符串密码=“*******”;
公共静态连接;
静态ConsoleCommandSender控制台=Bukkit.getConsoleSender();
//连接
公共静态void connect(){
如果(!isConnected()){
试一试{
con=DriverManager.getConnection(“jdbc:mysql://“+host+”:“+port+”/”+数据库、用户名、密码);
console.sendMessage(“\247c[\2476Minepedia System\247c]\247bMySQL Verbindung wurde aufgebaut!”);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
//断开
公共静态无效断开连接(){
如果(断开连接()){
试一试{
con.close();
console.sendMessage(“\247c[\2476Minepedia System\247c]\247bMySQL Verbindung wurde geschlossen!”);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
//断开
公共静态布尔值未连接(){
返回(con==null?false:true);
}
//获取连接
公共静态连接getConnection(){
返回con;
}
}
onEnable()
中,您应该调用
MySQL.connect()onDisable()
中调用
MySQL.disconnect()。这将正确连接和断开MySQL实例

编写此代码时假设您缩进以在Bukkit/Spigot上运行此代码,而要在BungeeCord中运行此代码,则应使用BungeeCord等效项替换
CommandSender

PreparedStatements
的一些示例:

创建

PreparedStatement ps=MySQL.getConnection().prepareStatement(“创建表,如果不存在播放器(名称VARCHAR(100)、UUID VARCHAR(100)、Coins INT(100)、主键(名称))”;
ps.executeUpdate();
主键
表示不能复制
名称
VARCHAR
几乎与
字符串相同

清空

PreparedStatement ps=MySQL.getConnection().prepareStatement(“TRUNCATE Players”);
ps.executeUpdate();
表中插入内容

PreparedStatement ps=MySQL.getConnection().prepareStatement(“将忽略插入播放器(名称、UUID、硬币)值(?,,?)”;
ps.setString(1,Player.getName());
ps.setString(2,Player.getUniqueId());
ps.setInt(3,10);
ps.executeUpdate();
使用
setString()
/
setInt()
,我替换了问号

表中删除某些内容

PreparedStatement ps=MySQL.getConnection().prepareStatement(“从Name=?”的播放器中删除”);
ps.setString(1,Player.getName());
ps.executeUpdate();
表中读取

PreparedStatement ps=MySQL.getConnection().prepareStatement(“从Name=?”的玩家中选择硬币”);
ps.setString(1,Player.getName());
结果集rs=ps.executeQuery();
整数=0;
如果(rs.next()==true){
硬币=卢比整(“硬币”);
}
如果您想从
玩家
获取所有信息,其中
名称
等于
Player.getName()
,您可以使用
*
代替
硬币


我希望这有帮助。再一次为我糟糕的英语感到抱歉。

在我的插件中,我使用了这个类,我命名为
MySQL

包me.Nightfighter001.Minepedia-System.Methoden;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
导入org.bukkit.bukkit;
导入org.bukkit.command.ConsoleCommandSender;
公共类MySQL{
公共静态字符串host=“minepedia.eu”;
公共静态字符串端口=“3306”;
公共静态字符串数据库=“GlobalData”;
公共静态字符串username=“*******”;
公共静态字符串密码=“*******”;
公共静态连接;
静态ConsoleCommandSender控制台=Bukkit.getConsoleSender();
//连接
公共静态void connect(){
如果(!isConnected()){
试一试{
con=DriverManager.getConnection(“jdbc:mysql://“+host+”:“+port+”/”+数据库、用户名、密码);
console.sendMessage(“\247c[\2476Minepedia System\247c]\247bMySQL Verbindung wurde aufgebaut!”);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
//断开
公共静态无效断开连接(){
如果(断开连接()){
试一试{
con.close();
console.sendMessage(“\247c[\2476Minepedia System\247c]\247bMySQL Ve