Mysql База данных записей отсутствует, но обязательно он вставлен и вошел в них локально - PullRequest
0 голосов
/ 28 августа 2018

POS-система, которая разработана с использованием транзакции продажи java swing hit для таблицы в базе данных mysql, размещенной на сервере mysql. текущая версия 8.0 (ранее мы использовали 5.6). Мы использовали соединение JDBC для связи с БД. Первый год live run работал отлично, без каких-либо проблем, связанных с записью в БД. В этом году мы размещаем систему и дБ в той же POS-машине. База данных является локальной для POS. В следующем году мы перенесли базу данных на другой сервер и сохранили POS на машине POS, подключенной к той же локальной сети. Затем, через несколько месяцев, возникла проблема: случайно пропущенные записи в таблице транзакций продаж (не только из-за того, что в записях пропущены некоторые другие записи в другой таблице). Обратите внимание, что теперь 2 POS-машины вставляют транзакции продаж в одну и ту же базу данных. У обоих компьютеров есть отдельные журналы местный для них.

Чтобы найти решение проблемы, мы зарегистрировали все транзакции в POS в текстовом файле. Найдите здесь https://drive.google.com/file/d/1t5xjQxl1g6ebZ7-bRE1O-LKN--4S3-70/view?usp=sharing

Этот журнал записи ударил только после вставки записи в таблицу. Идентификатор транзакции - это идентификатор продающей таблицы транзакций, получаемой путем запроса записи с использованием других значений в качестве параметра фильтра сразу после вставки. Параметры являются уникальными, поскольку мы также использовали время транзакции.

Проблема в том, что даже после попадания в журнал некоторые транзакции отсутствуют в таблице. Например, допустим, в журнале записано 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016. Но в базе данных есть только 1000,1001,1002,1003,1004,1008,1009,1010,1011,1014,1015,1016. Операции по продаже 1005,1006,1007,1012,1013 отсутствуют.

Изначально мы использовали mysql 5.6, а теперь мы использовали 8.0 в обеих версиях, и у нас возникла одна и та же проблема.

Это код для подключения к базе данных

package databaseconfigurationmodule;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import util.PropertyUtil;

public class DBConnectionManager {
   private  String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   private  Connection connection;
   private static DBConfigInfo dbcI;

    public Connection getConnection() {
        return connection;
    }

    private DBConnectionManager() {
       //JDBC_DRIVER = "com.mysql.jdbc.Driver";
       JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";

       try {
           dbcI = PropertiesManager.getDBConfigurationInfo(PropertyUtil.propertyConfigFile);
           Class<?> forName;
           forName = Class.forName(JDBC_DRIVER);
           connection = DriverManager.getConnection("jdbc:mysql://"+dbcI.getHost()+":3306/"+dbcI.getDatabase()+" ?autoReconnect=true&useSSL=false", dbcI.getUserName(), dbcI.getPassword());


       } catch (ClassNotFoundException | SQLException ex) {
           MessagesManager.displayMessage(ex.getMessage()+"\n"
                                          +"1.Check database host server is up and running"+"\n"
                                          +"2.Check database host server firewall is blocking the access"+"\n"
                                          );

       }

    }

    public static DBConnectionManager getInstance() {
        return DBConnectionManagerHolder.INSTANCE;
    }

    private static class DBConnectionManagerHolder {
    private static final DBConnectionManager INSTANCE = new DBConnectionManager();
    }


}

Вот как мы используем соединение для вставки записей

public static int save(Object object,boolean isLog){
     try {
         Transaction transaction = (Transaction)object;
         String sql = "insert into transactions (ID,CUSTOMER_ID,CUSTOMER_NAME,CUSTOMER_TYPE,PAYMENT_TYPE,TRANSACTION_DATE,USER,USER_NAME,TOTAL_VALUE,TIME,SPLIT_CREDIT,CANCEL,IS_BY_PRE_ORDER)"
                 + " values(?,?,?,?,?,?,?,?,?,?,?,?,?)";
         Connection con = DBConnectionManager.getInstance().getConnection();
         PreparedStatement prs = con.prepareStatement(sql);
         prs.setInt(1,transaction.getId());
         if (transaction.getCustomer()!=null) {
         prs.setInt(2,transaction.getCustomer().getId());
         prs.setString(3,transaction.getCustomer().getName());
         prs.setString(4,transaction.getCustomer().getType());
         }
         prs.setString(5, transaction.getPaymentType());
         prs.setDate(6, transaction.getTransactionDate());
         if (transaction.getUser()!=null) {
             prs.setInt(7, transaction.getUser().getId());
             prs.setString(8, transaction.getUser().getName());
         }
         else{
             prs.setInt(7, transaction.getUser().getId());
             prs.setString(8, transaction.getUser().getName());
         }
         prs.setDouble(9, transaction.getTotal_value());
         prs.setTime(10, transaction.getTransactionTime());
         if(transaction.getSplitCredit()!=null){
         prs.setDouble(11, transaction.getSplitCredit());
         }
         else{
         prs.setDouble(11, 0);
         }
         prs.setBoolean(12, false);
         prs.setBoolean(13, transaction.getIsByPreOrder());
         prs.executeUpdate();
         ResultSet res = view(FROM_ALL_COLUMNS, transaction);
         res.next();
         int id = res.getInt(1);
         transaction.setId(id);
         if (isLog) {
            CommonUtil.getInstance().logTransactionInsert(transaction); 
         }

         return id;

         } catch (Exception ex) {
         Logger.getLogger(TransactionOperations.class.getName()).log(Level.SEVERE, null, ex);
     }
    return 0;
}

Пожалуйста, учтите также следующие факторы

Ошибка не выдана.

Мы также проверили время ожидания сети, но оно нормально, время ожидания сети отсутствует.

Пользователь сообщает о каком-то зависании кассовых терминалов в продажах, когда спешит с покупателем.

А также пользователь сообщил, что, например: Он ввел в систему 33 поп-корна. Он проверил это в отчете около 13:00 по всем 33 перечисленным. Когда он перезапускает отчет около 14:00, отображается 0

.

Мне нужно выяснить, связано ли это с проблемой java-соединения или с db-сервером.

На сервере базы данных мы используем root с полностью предоставленными привилегиями. удаленный доступ разрешен для пользователя root.

Кто-нибудь испытывал это раньше? Пожалуйста, помогите мне

заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...