Вы можете создать 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)
);