importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;import java.io.*;import java.sql.*;importjava.util.Properties;public classBlobTest {privateConnection connection;privateResultSet resultSet;privatePreparedStatement preparedStatement;
@BeforeEachpublic void start() throwsException {
Properties properties= newProperties();
InputStream in= this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(in);
String driver= properties.getProperty("driver");
String jdbcUrl= properties.getProperty("jdbcUrl");
String user= properties.getProperty("user");
String password= properties.getProperty("password");
Class.forName(driver);
connection=DriverManager.getConnection(jdbcUrl, user, password);
}
@AfterEachpublic void end() throwsException {if (resultSet != null) {
resultSet.close();
}if (preparedStatement != null) {
preparedStatement.close();
}if (connection != null) {
connection.close();
}
}/*** 插入 BLOB 类型的数据必须使用 PreparedStatement:因为 BLOB 类型的数据时无法使用字符串拼写的。
* 可封装成 Blob 对象,也可直接使用IO流,调用 setBlob 或 setBinaryStream*/@Testpublic voidtestInsertBlob() {try{
String sql= "INSERT INTO blob_test (file, name) VALUES (?,?)";
preparedStatement=connection.prepareStatement(sql);
Blob blob=connection.createBlob();
InputStream in= this.getClass().getClassLoader().getResourceAsStream("file.png");
OutputStream out= blob.setBinaryStream(1);byte[] buffer = new byte[1024];int len = 0;while ((len = in.read(buffer)) != -1) {
out.write(buffer,0, len);
}
in.close();
out.close();
preparedStatement.setBlob(1, blob);//preparedStatement.setBlob(1, in);//preparedStatement.setBinaryStream(1, in);
preparedStatement.setString(2, "ABCDE");
preparedStatement.execute();
}catch(Exception e) {
e.printStackTrace();
}
}
}