1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Проблема с MySQL

Тема в разделе "Разработка плагинов для новичков", создана пользователем AxmeD, 2 июн 2014.

  1. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Вот код:

    Код:
    package ru.axmed.civilization.api;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.bukkit.entity.Player;
    
    import code.husky.mysql.MySQL;
    import ru.axmed.civilization.Civilization;
    
    public class MySQLManager
    {
        Civilization pl;
        public MySQLManager(Civilization pl){this.pl = pl;}
        String host;
        String port;
        String database;
        String user;
        String pass;
        String DBTable;
        MySQL db = new MySQL(pl, host, port, database, user, pass);
    
        public void setupDB() throws SQLException
        {
            this.host = pl.getDataBase().getString("hostname");
            this.port = pl.getDataBase().getString("port");
            this.database = pl.getDataBase().getString("database");
            this.user = pl.getDataBase().getString("user");
            this.pass = pl.getDataBase().getString("pass");
            this.DBTable = pl.getDataBase().getString("table"); 
            this.db = new MySQL(pl, host, port, database, user, pass);
            this.db.openConnection();
            Statement statement = db.getConnection().createStatement();
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS `"+DBTable+"` (`Name` varchar(32), `Coins` int)");
            statement.close();
        }
    
        public void closeDB() throws SQLException
        {
            db.closeConnection();
        }
    
        public void setCoins(Player p, int coins) throws SQLException
        {
            Statement statement = db.getConnection().createStatement();
            statement.executeUpdate("INSERT INTO `"+DBTable+"` (`Name`, `Coins`) VALUES ('" + p.getName() + "', '"+ coins + "');");
            statement.close();
        }
    }
    

    И вот ошибка:

    Пробовал в setCoins ещё раз openConnection, и назначал host, port etc., но тоже не помогло. Ломаюсь с этим уже третий день...
     
    Лайка3 и Лайка2 нравится это.
  2. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Забыл сказать. closeDB и setupDB нормально работают, без ошибок.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  3. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    на 60 строке объект NULL.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  4. kris13

    kris13 Активный участник Пользователь

    Баллы:
    78
    Пожалуйста, укажите нам какая из 3 строк в методе имеет номер 60 в исходнике.
    По остальному, если поверить, что в получении statement ошибки нет, то значит вы передали null в Player.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  5. MrTapantul

    MrTapantul Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    Spildabongwada
    Месье, да вы в другой раздел зашли, вам в соседний!
     
    Лайка3, Лайка2 и mahimamax нравится это.
  6. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Нет, дело в том, что на 60 строке у меня

    1. public void setCoins(Player p, int coins) throws SQLException
    2. {
    3. //ВОТ ЭТО Statement statement = db.getConnection().createStatement();
    4. statement.executeUpdate("INSERT INTO `"+DBTable+"` (`Name`, `Coins`) VALUES ('" + p.getName() + "', '"+ coins + "');");
    5. statement.close();
    6. }
    Я попробовал вставить вместе неё if(db.getConnection != null) и мне все равно выдало эту же ошибку на этой же 60 строке
    Нет, всё правильно, я не прошу создать плагин, а прошу помочь решить проблему
     
    Лайка3, Лайка2 и mahimamax нравится это.
  7. MrTapantul

    MrTapantul Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    Spildabongwada
    Для этого есть раздел " Помощь"
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  8. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    MySQLManager.java:60

    здесь какой-то объект nullPointer ищи лутше
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  9. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Нашёл. Null у меня db.getConnection(), но я же обозначил в setupDB что да как, он не должен быть null. Или мне нужно в этом методе тоже приписать ему значение заново?
     
  10. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Не должен - так инициализируй.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  11. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Код:
    package ru.axmed.civilization.api;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import org.bukkit.entity.Player;
    
    import code.husky.mysql.MySQL;
    import ru.axmed.civilization.Civilization;
    
    public class MySQLManager
    {
        Civilization pl;
        public MySQLManager(Civilization pl){this.pl = pl;}
        String host;
        String port;
        String database;
        String user;
        String pass;
        String DBTable;
        MySQL db = new MySQL(pl, host, port, database, user, pass);
       
       
    
        public void setupDB() throws SQLException
        {
            this.host = pl.getDataBase().getString("hostname");
            this.port = pl.getDataBase().getString("port");
            this.database = pl.getDataBase().getString("database");
            this.user = pl.getDataBase().getString("user");
            this.pass = pl.getDataBase().getString("pass");
            this.DBTable = pl.getDataBase().getString("table"); 
            this.db = new MySQL(pl, host, port, database, user, pass);
            this.db.openConnection();
            Statement statement = db.getConnection().createStatement();
            statement.executeUpdate("CREATE TABLE IF NOT EXISTS `"+DBTable+"` (`Name` varchar(32), `Coins` int)");
            statement.close();
        }
        public void closeDB() throws SQLException
        {
            db.closeConnection();
        }
       
        public ResultSet getPlayerInfo(Player p) throws SQLException
        {
            ResultSet rs = null;
            if(db.getConnection() == null)
            {
                this.host = pl.getDataBase().getString("hostname");
                this.port = pl.getDataBase().getString("port");
                this.database = pl.getDataBase().getString("database");
                this.user = pl.getDataBase().getString("user");
                this.pass = pl.getDataBase().getString("pass");
                this.DBTable = pl.getDataBase().getString("table"); 
                this.db = new MySQL(pl, host, port, database, user, pass);
                this.db.openConnection();
            }
            else
            {
            Statement statement = db.getConnection().createStatement();
            rs = statement.executeQuery("SELECT * FROM `"+DBTable+"` WHERE `Name` = '"+p.getName()+"';");
            statement.close();
            }
            return rs;
        }
        public int getCoins(Player p) throws SQLException
        {
            ResultSet rs = getPlayerInfo(p);
            return rs.getInt("Coins");
        }
       
        public void setCoins(Player p, int coins) throws SQLException
        {
            if(db.getConnection() == null)
            {
                this.host = pl.getDataBase().getString("hostname");
                this.port = pl.getDataBase().getString("port");
                this.database = pl.getDataBase().getString("database");
                this.user = pl.getDataBase().getString("user");
                this.pass = pl.getDataBase().getString("pass");
                this.db = new MySQL(pl, host, port, database, user, pass);
                this.db.openConnection();
            }
            else
            {
                this.DBTable = pl.getDataBase().getString("table");
                Statement statement = db.getConnection().createStatement();
                statement.executeUpdate("INSERT INTO `"+DBTable+"` (`Name`, `Coins`) VALUES ('" + p.getName() + "', '"+ coins + "');");
                statement.close();
            }
        }
    }
    
    Вот воообще весь код. Та же самая ошибка на 77 строке
     
    Лайка3, Лайка2 и mahimamax нравится это.
  12. kris13

    kris13 Активный участник Пользователь

    Баллы:
    78
    Так, по порядку:
    MySQL db = new MySQL(pl, host, port, database, user, pass); - уберите инициализацию, эти переменные null.
    statement.executeUpdate("CREATE TABLE IF NOT EXISTS `"+DBTable+"` (`Name` varchar(32), `Coins` int)"); - зачем executeUpdate? Используйте просто execute. Еще советую в каждой таблице создавать столбец id и ставить ему автоинкримент.

    В вашей последней реализации в setCoins уберите else, а то глупо получается.
    И покажите уже ваш MySQL
     
    Лайка3, Лайка2, mahimamax и 3 другим нравится это.
  13. DigitalMisha

    DigitalMisha Активный участник Пользователь

    Баллы:
    58
    Таки решились для плагина "Цивилизация" сделать api?
     
    Лайка3, Лайка2 и Лайка нравится это.
  14. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    А дебаг?
    Если ошибка в строке 77, поставь там брейкпоинт и проверь значения всех полей и т.п.
     
    Лайка3, Лайка2, mahimamax и ещё 1-му нравится это.
  15. Автор темы
    AxmeD

    AxmeD Старожил Пользователь

    Баллы:
    103
    Нет, не совсем так) Я просто назвал так package
    я понял, что null у меня - подключение(db.getConnection). Но я не знаю, что с этим делать. Я инициализировал, но все равно
     
    Лайка3, Лайка2 и mahimamax нравится это.
  16. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Что там понимать? Значит у тебя должны быть ошибки при запуске плагина, либо делай дебаг подробно и смотри на этапах, где у тебя конструктор - почему там null.
     
    Лайка3, Лайка2, mahimamax и 2 другим нравится это.

Поделиться этой страницей