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

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

Discussion in 'Разработка плагинов для новичков' started by AdMiRaLL, Feb 4, 2015.

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

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

    Trophy Points:
    68
    Skype:
    xxxpro100stasxxx
    Имя в Minecraft:
    AdMiRaLLL
    Для подключения к бд использую такой код
    Code:
    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;
        }
    }
    Но через раз (не всегда) у меня появляется вот такая ошибка в консоли, ну то есть я не получаю никаких данных из базы. Я так понимаю я просто не получаю коннект к бд. Как бороться с этим? Как проверить состояние коннекта и отправил ли я запрос, чтобы бороться с этим. А то переодически такие ошибки появляются

    Code:
    [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 Старожил Пользователь

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

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

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

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

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

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

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

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

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

    Trophy Points:
    173
    google.com
     
  8. skynetxxx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Share This Page