Войти или зарегистрироваться

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

  • Автор темы Автор темы 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();
    }
}

И вот ошибка:

Caused by: java.lang.NullPointerException
at ru.axmed.civilization.api.MySQLManager.setCoins(MySQLManager.java:60)

Пробовал в setCoins ещё раз openConnection, и назначал host, port etc., но тоже не помогло. Ломаюсь с этим уже третий день...
 
Пожалуйста, укажите нам какая из 3 строк в методе имеет номер 60 в исходнике.
По остальному, если поверить, что в получении statement ошибки нет, то значит вы передали null в Player.
 
Нет, дело в том, что на 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 строке
Месье, да вы в другой раздел зашли, вам в соседний!
Нет, всё правильно, я не прошу создать плагин, а прошу помочь решить проблему
 
Нет, дело в том, что на 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 строке

Нет, всё правильно, я не прошу создать плагин, а прошу помочь решить проблему
Для этого есть раздел " Помощь"
 
MySQLManager.java:60

здесь какой-то объект nullPointer ищи лутше
Нашёл. Null у меня db.getConnection(), но я же обозначил в setupDB что да как, он не должен быть null. Или мне нужно в этом методе тоже приписать ему значение заново?
 
Нашёл. Null у меня db.getConnection(), но я же обозначил в setupDB что да как, он не должен быть null. Или мне нужно в этом методе тоже приписать ему значение заново?
Не должен - так инициализируй.
 
Не должен - так инициализируй.
Код:
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 строке
 
Так, по порядку:
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
 
Таки решились для плагина "Цивилизация" сделать api?
Нет, не совсем так) Я просто назвал так package
А дебаг?
Если ошибка в строке 77, поставь там брейкпоинт и проверь значения всех полей и т.п.
я понял, что null у меня - подключение(db.getConnection). Но я не знаю, что с этим делать. Я инициализировал, но все равно
 
Нет, не совсем так) Я просто назвал так package

я понял, что null у меня - подключение(db.getConnection). Но я не знаю, что с этим делать. Я инициализировал, но все равно
Что там понимать? Значит у тебя должны быть ошибки при запуске плагина, либо делай дебаг подробно и смотри на этапах, где у тебя конструктор - почему там null.
 
Назад
Верх