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

Я пытаюсь подключиться к базе данных PostgreSQL с помощью Java и пытаюсь отобразить результат выполнения запроса с помощью Swing JTable. Я использую JDBC для подключения к моей базе данных PostgreSQL. Вот кодВерсия PostgreSQL - 4.11.

package com.company;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.Vector;

public class SQLProject {

    private JTextField textFieldQuery;
    private JButton buttonGo;
    private JTable tableQueries;
    private JPanel panelMain;

    public SQLProject() {
        buttonGo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    ResultSet resultSet = getData();
                    TableModel tableModel = buildTableModel(resultSet);
                    tableQueries.setModel(tableModel);
                } catch(SQLException e1) {
                    e1.printStackTrace();
                }
            }
        });
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame("SQLProject");
        frame.setContentPane(new SQLProject().panelMain);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private ResultSet getData() throws SQLException {
        try{ // driver loading
            Class.forName("org.postgresql.Driver");
        }
        catch(Exception e){
            e.printStackTrace ();
        }
        final String url = "jdbc:postgresql://127.0.0.1:57956/browser/";
        try {
            // problem is here
            final Connection connection = DriverManager.getConnection(url, "postgres", "stalker");
            final String sql = textFieldQuery.getText();
            final PreparedStatement preparedStatement = connection.prepareStatement(sql);
            try { connection.close( ); }
            catch(SQLException e) {e.printStackTrace();}

            return preparedStatement.executeQuery();
        }
        catch(SQLException e) {
            throw new SQLException();
        }
    }

    public static TableModel buildTableModel(final ResultSet resultSet)
            throws SQLException {
        int columnCount = resultSet.getMetaData().getColumnCount();

        // Column names.
        Vector<String> columnNames = new Vector<>();
        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
            columnNames.add(resultSet.getMetaData().getColumnName(columnIndex));
        }

        // Data of the table.
        Vector<Vector<Object>> dataVector = new Vector<>();
        while (resultSet.next()) {
            Vector<Object> rowVector = new Vector<>();
            for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
                rowVector.add(resultSet.getObject(columnIndex));
            }
            dataVector.add(rowVector);
        }

        return new DefaultTableModel(dataVector, columnNames);
    }

}

Возможно, проблема в этой строке кода.

final Connection connection = DriverManager.getConnection(url, "postgres", "stalker");

Имя пользователя и пароль верны, но я не уверен насчетURL.

...