Как сделать кнопку загрузки для получения PDF-файла в базе данных sql? (java swing) - PullRequest
0 голосов
/ 11 марта 2020

Добрый день всем! Я пытаюсь создать настольное приложение, используя java swing, где пользователь может загружать pdf файлы в базу данных mysql. Я уже выполнил загрузку в приложении, но у меня возникли проблемы с созданием кнопки загрузки в приложении. Функция кнопки download состоит в том, чтобы извлечь файл pdf в базе данных mysql, а затем загрузить его на компьютер пользователя.

Вот что я нашел при вставке файла PDF из https://www.java-tips.org/other-api-tips-100035/69-jdbc/845-how-to-storeretrieve-pdf-document-tofrom-sqlserver.html Приведенная выше ссылка уже имеет функцию получения pdf-данных, но я не могу понять, как реализовать ее в моей кнопке загрузки.

  public void upload(Connection conn,String filename) {
        int len;
        String query;
        PreparedStatement pstmt;

        try {
            File file = new File(filename);
            FileInputStream fis = new FileInputStream(file);
            len = (int)file.length();
            query = ("insert into fileStorage VALUES(?,?,?)");
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1,file.getName());
            pstmt.setInt(2, len);

            //method to insert a stream of bytes
            pstmt.setBinaryStream(3, fis, len); 
            pstmt.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

В чем проблема делает функцию для моей кнопки загрузки. как извлечь файл из базы данных и одновременно загрузить его после нажатия кнопки download.

1 Ответ

0 голосов
/ 11 марта 2020

Да, к сожалению, я не знаю формат вашей таблицы, однако мы должны иметь возможность создать подготовленный оператор, который получает необработанные байты файла из базы данных. Далее будет получен байтовый массив из базы данных, а затем, при необходимости, создан новый файл из необработанных байтов.

  1. Измените fileName на правильное имя столбца для имени файла.
  2. Измените fileContent на имя столбца для байтового массива.
  3. Убедитесь, что fileContent - это тип varbinary.
  4. Заменить null в моей ссылке на скачивание (Connection, String) допустимой ненулевой ссылкой на Connection.
    public static void main(String[] args) {
        try {
            byte[] download = download(null, "test");

            Path output = Paths.get("my", "output", "file.pdf");

            Files.write(output, download, StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW);
        } catch (IOException | SQLException e) {
            throw new RuntimeException("Uh oh something went wrong!", e);
        }
    }

    static byte[] download(Connection connection, String fileName) throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement("SELECT * FROM fileStore WHERE fileName = ?")) {
            statement.setString(1, fileName);

            try (ResultSet results = statement.getResultSet()) {
                if (results.next()) {
                    return results.getBytes("fileContent");
                }
            }
        }
        throw new IllegalStateException("No file can be found for this name.");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...