Могу ли я сохранить снимок экрана, сделанный из netbeans, в Mysql - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над проектом, в котором решил сохранить скриншот счета в базе данных mysql. Но ImageIcon, используемый для снятия скриншота, не показывает длину файла, поэтому setBinaryStream () не работает, я пробовал pstmt.setBlob (1, (BLOB) icon), но все еще не работает.

Можете ли вы сохранить сделанный снимок экрана прямо в базе данных, если да, то сообщите мне. Или я могу создавать и сохранять собственные счета в netbeans.

try
{
    Rectangle screen = new Rectangle (Toolkit.getDefaultToolkit().getScreenSize());
    BufferedImage capture = new Robot().createScreenCapture(screen);
    ImageIcon icon = new ImageIcon(capture);
    int len = icon.getWidth();
    ImageIO.write(capture,"jpg",new File("screenshot.jpg"));

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Sign_up.class.getName()).log(Level.SEVERE, null, ex);
        }
        try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/webapp","root","")) {
            Statement at = con.createStatement();
            String qt = "insert into picture (Pictures) values (?)";
            PreparedStatement pstmt = con.prepareStatement(qt);
            pstmt.setBinaryStream (icon,);

}

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Возможно, вместо сохранения данных изображения непосредственно в базе данных (не рекомендуется) сохранить файл где-нибудь (например, в службе удаленного хостинга файлов). Затем в операторе SQL сохраните ссылку на файл.

0 голосов
/ 29 мая 2020

Вы можете создать ByteArrayInputStream, используя байты снимка экрана, а затем передать его подготовленному оператору с помощью setBinaryStream (int, InputStream) следующим образом ...

ps.setBinaryStream (1,new ByteArrayInputStream(baos.toByteArray()));

Вот полная программа, которая делает снимок экрана, записывает его в большой двоичный объект, а затем считывает его из большого двоичного объекта и записывает его в файл (для проверки).

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.imageio.ImageIO;

public class ScreenShot {

    public static void main(String[] args) throws Exception {
        if (args.length != 3) {
            // Note: Don't pass passwords on the command line in real life.
            System.err.println("Usage: java ScreenShot <dbUrl> <dbUser> <dbPwd>");
            return;
        }
        // Capture the screenshot
        Rectangle screen = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
        BufferedImage capture = new Robot().createScreenCapture(screen);

        // Write it to a ByteArrayOutputStream
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(capture, "jpg", baos);

        // Insert the bytes into the database
        Connection connection = DriverManager.getConnection(args[0], args[1], args[2]);
        String sql =  "insert into picture (Pictures) values (?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setBinaryStream (1,new ByteArrayInputStream(baos.toByteArray()));
        ps.execute();

        // Select the image from the database.
        sql = "select Pictures from picture where id = 1";
        ps = connection.prepareStatement(sql);
        ResultSet rs = ps.executeQuery(sql);
        if (rs.next()) {
            InputStream input = rs.getBinaryStream(1);
            // Write the image to a file (for verification).
            FileOutputStream fos = new FileOutputStream("screenshot.jpg");
            byte[] buffer = new byte[1024];
            while (input.read(buffer) > 0) {
                fos.write(buffer);
            }
            input.close();
            fos.close();
        }
    }

}

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

CREATE TABLE test.picture (
    id int AUTO_INCREMENT ,
    Pictures MEDIUMBLOB,
PRIMARY KEY (id)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...