Как получить доступ к базе данных с определенного сервера с помощью Java? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь получить доступ к базе данных с другого сервера, но пока безуспешно. Это событие происходит, когда я выбираю object «ВСЕ» в моем combobox, таблица загружает все данные с разных серверов.

Текущий код, который я подключил только к локальному хосту, работает нормально. Однако, когда я пытаюсь подключиться к другому серверу для загрузки их данных, я получаю синтаксическую ошибку при попытке вставить 192.168.1.51.sales.items в String sqlall. Кроме того, я попытался изменить prepareStatement, написав cn.prepareStatement(sqlall) + cn1.prepareSatement("union Select * from 192.168.1.52.sales.items); У меня нет больше идей о том, как подключиться к обоим серверам.

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

 private void combobox_branchItemStateChanged(java.awt.event.ItemEvent evt) {  

  Object branch = combobox_branch.getSelectedItem();


    try
    {
        // All is selected
        if("All".equals(branch))
        {

          Connection cn = db.itemconnector.getConnection();


            String sqlall = " Select * from sales2.items union Select * from sales1.items union Select * from sales.items  " ;    //I tried accessing multiple databases in my own localhost and worked. 
            PreparedStatement ps = cn.prepareStatement(sqlall);
            ResultSet rs = ps.executeQuery();
            DefaultTableModel tm = (DefaultTableModel)itemTable.getModel();
            tm.setRowCount(0);
            while(rs.next())
            {
            Object o[] = {rs.getInt("id"), rs.getString("location"), rs.getString("product_name"),rs.getString("product_category"),rs.getString("product_description"),rs.getInt("product_stock"), rs.getFloat("product_price"), rs.getString("product_status")};
            tm.addRow(o);


            }

        }

        catch (Exception e)
            {
                JOptionPane.showMessageDialog(null, e, "Connection Error", JOptionPane.ERROR_MESSAGE);
            }
    }

И у меня есть класс в другом пакете, и это его код:

    package db;

    import java.sql.*;

     public class itemconnector {

    public static Connection getConnection() throws Exception
{
    Class.forName("com.mysql.jdbc.Driver");
    Connection cn = (Connection)
            DriverManager.getConnection("jdbc:mysql://192.168.1.50:3306/sales","root","");

    return cn;
}

1 Ответ

0 голосов
/ 12 мая 2019

Невозможно запросить разные базы данных на разных серверах в одном запросе SQL.

Также невозможно обойти это путем "объединения" подготовленных операторов.(Для начала, это бессмысленная Java!)

Вам нужно открыть отдельный Connection для каждого отдельного сервера базы данных и запросить соответствующие таблицы на этом сервере.Затем объедините информацию из отдельных ResultSet объектов в коде Java.

«Объединение» будет выглядеть как повторение результатов в каждом наборе результатов и добавление их в структуру данных Java ...

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