Анализ кода, советы по архитектуре

242
12 июля 2017, 23:48

Вопрос какие у меня проблемы с архитектурой и вообще по синтаксису. И как передать можно данные от сервера клиенту, сразу списком? Или киньте ссылки где знания подкрепить. В таблице три поля Name, Number, Money. Number-primary key.

Сервер:

public class Server implements Runnable{

    Socket connection;
    String input;
    DbHelper dbHelper = new DbHelper();
    List<Integer> list = new ArrayList<>();
    public Server(Socket socket){
    this.connection = socket;
        }
    public static void main(String[] args) throws IOException {
        System.out.println("Welcome to Server!");
        int i=1;
        ServerSocket servers = null;
        try{
            servers = new ServerSocket(4444);
        }catch(IOException e){
            System.out.println("Can't connect to port");
            System.exit(-1);
        }
        //Ждем подключения клиента, запускаем поток на каждое подключение
        while(true){
            try{
                System.out.println("Waiting for a client...");
                Socket connection = servers.accept();
                Runnable runnable = new Server(connection);
                Thread thread = new Thread(runnable);
                thread.start();
                System.out.println("Client connected");
            }catch(IOException e){
                System.out.println("");
                System.exit(-1);
            }
        }
    }
    @Override
    public void run() {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream()), true);
            System.out.println("Waiting for messages...");
            try {
                if ((input = in.readLine()) != null) {
                    System.out.println("S: " + input);
                    List<AccountpayE> result = dbHelper.readAccount(Integer.parseInt(input));
                    for (AccountpayE accountpayEnt : result) {
                        out.println(accountpayEnt.getName());
                        out.println(accountpayEnt.getMoney());
                    }
                    List<AccountpayE> result1 = dbHelper.payAccount(Integer.parseInt(input));
                    for (AccountpayE accountpayEnt : result1) {
                        out.println(accountpayEnt.getNumber());
                         out.println(accountpayEnt.getMoney());
                    }
                }
                        for (int i = 0; i < 3; i++) {
                        if ((input = in.readLine()) != null) {
                        list.add(Integer.parseInt(input));
                            System.out.println(list.get(i));
                        }
                }
                dbHelper.incertAccount(list.get(0),list.get(1),list.get(2));
                List<AccountpayE> result2 = dbHelper.readAccount(Integer.parseInt(input));
                for (AccountpayE accountpayEnt : result2) {
                    out.println(accountpayEnt.getMoney());
                    System.out.println(accountpayEnt.getMoney());
                }
            } catch (Exception e) {
                out.println("Error");
       }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Клиент:

public class Client {
    public String fuser;
    public String fserver;
    PrintWriter out;
    BufferedReader in;
    BankViewAccount bankViewAccount = new BankViewAccount();
    BankView bankView = new BankView();
    List list = new ArrayList();
    private String userName;
    public void setName(String name) {
        this.userName = name;
    }
    public String getName() {
        return userName;
    }
    Client() {
        Socket fromserver = null;
        try {
            fromserver = new Socket("localhost", 4444);
            System.out.println("Welcome to Client!");
            in = new BufferedReader(new InputStreamReader(fromserver.getInputStream()));
            out = new PrintWriter(new OutputStreamWriter(fromserver.getOutputStream()), true);
            System.out.println("Set name: ");
            bankView.pack();
            bankView.setVisible(true);
            System.out.println(bankView.getNumber());

            if (bankView.getNumber() != null) {
                System.out.println("Account: " + bankView.getNumber());
                out.println(bankView.getNumber());
            }
            if ((fserver = in.readLine()) != null) {
                if (fserver.equals("Error")) {
                    JOptionPane.showMessageDialog(null, "Not Acoount", "Ошибка", JOptionPane.OK_OPTION);
                    new Client();
                } else {
                    bankViewAccount.label.setText(bankView.getNumber());
                    bankViewAccount.textField1.setText(fserver);
                }
            }
            if ((fserver = in.readLine()) != null) {
                    bankViewAccount.label.setText(bankView.getNumber());
                    bankViewAccount.textField2.setText(fserver);
                    bankViewAccount.pack();
                    bankViewAccount.setVisible(true);
                        System.out.println("Transfer to account " + bankViewAccount.getNumberTo());
                        out.println(bankView.getNumber());
                        out.println(bankViewAccount.getNumberTo());
                        out.println(bankViewAccount.getMoney());
            }
            if ((fserver = in.readLine()) != null) {
                bankViewAccount.textField2.setText(fserver);
                System.out.println(fserver);
            }
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.OK_OPTION);
        } finally {
            try {
                in.close();
                out.close();
                fromserver.close();
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.OK_OPTION);
            }
        }
    }
}

DBHelper:

public class DbHelper {
    static Connection conn;
    private static DbHelper instance;
    private static String userName = "root";
    private static String password = "";
    private static String url = "jdbc:mysql://localhost/account";
    private Statement stmt = null;
    private  ResultSet rs = null;
    private  int sr;
    static Connection[] connections;
    public static DbHelper getInstance() {
        if (instance == null) {
            instance = new DbHelper();
        }
        return instance;
    }
    DbHelper() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(url, userName, password);
            System.out.println("Database connection established");
            stmt = conn.createStatement();
                  } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        } finally {
            {
                if (conn != null) {
                    try {
                        conn.close();
                        System.out.println("Database connection terminated");
                    } catch (Exception e) {
                    }
                }
            }
        }
    }
    public Connection getConn() {
        if (conn == null) {
            try {
                conn = DriverManager.getConnection(url);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return conn;
    }
    public List<AccountpayE> listAccount() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<AccountpayE> result = session.createQuery("from AccountpayE").list();
        session.getTransaction().commit();
        session.close();
        return result;
    }
   public List<AccountpayE> readAccount(Integer number) {
       Session session = HibernateUtil.getSessionFactory().getCurrentSession();
       session.beginTransaction();
       List<AccountpayE> result;
       result = session.createQuery("from AccountpayE where number="+number).list();
       session.getTransaction().commit();
       session.close();
       return result;
     }
    public List<AccountpayE> payAccount(Integer number) throws Exception {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<AccountpayE> result1;
        result1 = session.createQuery("select number from AccountpayE where name=(select name from AccountpayE where number="+number).list();
        session.getTransaction().commit();
        session.close();
        //  HibernateUtil.shutdown();
        return result1;
    }
    public void incertAccount(Integer number1, Integer number2, Integer money) throws Exception {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        AccountpayE op = session.get(AccountpayE.class, number1);
        op.setMoney(op.getMoney()-money);
        session.update(op);
        AccountpayE op1 = session.get(AccountpayE.class, number2);
        op1.setMoney(op1.getMoney()+money);
        session.update(op);
        session.getTransaction().commit();
        session.close();
    }
}
READ ALSO
Утечка памяти на java

Утечка памяти на java

Можете подсказать, есть ли в программах утечка памяти?

353
BatchUpdate JDBCTemplate - пакетное выполнение sql-запросов Java

BatchUpdate JDBCTemplate - пакетное выполнение sql-запросов Java

Есть метод, который обновляет данные в БД по HashMap

261