Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Базы данных

Тема в разделе "Разработка плагинов для новичков", создана пользователем AdMiRaLL, 4 фев 2015.

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

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

    Баллы:
    68
    Skype:
    xxxpro100stasxxx
    Имя в Minecraft:
    AdMiRaLLL
    Для подключения к бд использую такой код
    Код:
    public class DataBases {
    
        static Connection conn = null;
        static ResultSet rs = null;
    
        public static Connection connect() throws SQLException {
            Properties connInfo = new Properties();
    
            connInfo.put("characterEncoding", "UTF8");
            connInfo.put("user", "asdf"); 
            connInfo.put("password", "asdf");
            return  DriverManager.getConnection("jdbc:mysql://5.9.58.48/asdf",
                    connInfo);
        }
    
        public static void disconnect() throws SQLException {
            if (conn != null)
                conn.close();
            if (rs != null)
                rs = null;
        }
    
        public static ResultSet dbGet(String query) throws SQLException {
            try {
                return conn.createStatement().executeQuery(query);
            } catch (SQLException e) {
                Bukkit.getConsoleSender().sendMessage((e.toString()));
                return null;
            }
        }
    
        public static boolean dbSet(String query) throws SQLException {
            try {
                return conn.createStatement().execute(query);
            } catch (SQLException e) {
                System.out.println(e.toString());
                return false;
            }
        }
    
        public static void setSQL(String query) throws SQLException {
            if (conn != null) {
                if (conn.isClosed())
                    conn = connect();
            } else {
                conn = connect();
            }
            dbSet(query);
        }
    
        public static ResultSet getSQL(String query) throws SQLException {
            if (conn != null) {
                if (conn.isClosed())
                    conn = connect();
            } else {
                conn = connect();
            }
            ResultSet r = dbGet(query);
            return r;
        }
    }
    Но через раз (не всегда) у меня появляется вот такая ошибка в консоли, ну то есть я не получаю никаких данных из базы. Я так понимаю я просто не получаю коннект к бд. Как бороться с этим? Как проверить состояние коннекта и отправил ли я запрос, чтобы бороться с этим. А то переодически такие ошибки появляются

    Код:
    [20:27:07 INFO]: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Commun
    ications link failure
    
    The last packet successfully received from the server was 137а412 milliseconds a
    go.  The last packet sent successfully to the server was 0 milliseconds ago.
     
  2. Хостинг MineCraft
    <
  3. ptnk

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

    Баллы:
    173
    Погуглить в интернете об такой ошибке.

    Не держать соединение открытым.
     
  4. Автор темы
    AdMiRaLL

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

    Баллы:
    68
    Skype:
    xxxpro100stasxxx
    Имя в Minecraft:
    AdMiRaLLL
    Почему не держать его открытым? Каждый раз открывать закрывать?[DOUBLEPOST=1423071743,1423071708][/DOUBLEPOST]
    И что значит открытым? делать .disconnect?
     
  5. ptnk

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

    Баллы:
    173
    Это значит, что тебе нужно почитать оффициальные туториалы по работе c jdbc.
     
  6. Автор темы
    AdMiRaLL

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

    Баллы:
    68
    Skype:
    xxxpro100stasxxx
    Имя в Minecraft:
    AdMiRaLLL
    Можно линк?
     
  7. ptnk

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

    Баллы:
    173
    google.com
     
  8. skynetxxx

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

    Баллы:
    123
    Имя в Minecraft:
    skynetxxx
    А разве не выгоднее наоборот держать соединение открытым, повысив время до таймаута, чтобы не тратить каждый раз ресурсы сервера на установку соединения?
     
  9. ptnk

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

    Баллы:
    173
    Люди не хотят разбираться с ошибками, а хотят чтобы сразу всё работало. Не однократно правил чужие плагины, в которых соединение открывалось и не закрывалось и приводило на некоторых машинах к ошибкам. Самый простой способ избавиться от подобных ошибок - закрывать соединение.

    И по поводу производительности с открывающимися соединениями могу сказать одно: ни один из плагинов, который работал с бд не вызывал подлагиваний с бд.

    Есть так называемые "good practice" всегда можно там поглядеть, как и что работает, но вывод делать самому.

    Я в последних плагинах не работаю с jdbc, а работаю с orm.
     
  10. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    И как оно?
     
  11. ptnk

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

    Баллы:
    173
    Мне больше нравится с orm, пусть и кривой ebeans.
     
  12. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    А если например Hibernate?
     
  13. ptnk

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

    Баллы:
    173
    А смысл? У тебя есть встроенная система ebean, с помощью которой происходит похожая работа с бд с меньшим количеством проблем.

    Если ты не работал с jpa, то плагины - это довольно плохое место для тренировки, в особенности для разбирания работы с hibernate.
     

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