MySQL中存取文件的重点在于图片在数据库中存储的数据类型,以及将数据读出来后的数据类型。
MySQL可以使用LONGBLOB或者BLOB类型存储,在java中可以使用byte[]类型来接数据。
下面是一个小测试,关于在本地的一个图片存到数据库中,让读出来放到本地。其中使用的是JDBC+MySQL:在MySQL中使用LONGBLOB存储图片。
@Test
public void test06() throws SQLException, IOException {
String SQL = "insert into test_image values ( ? , ? )" ;
PreparedStatement preparedStatement = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setInt( 1 , 1);
File file = new File("C:\\Users\\Administrator\\Pictures\\Camera Roll\\下载.png");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = fileInputStream.readAllBytes();
preparedStatement.setObject(2, bytes,JDBCType.BLOB);
// execute 系列方法 ( 包括 批量更新 ) 都来自于 Statement 接口 。
int i = preparedStatement.executeUpdate();
System.out.println( i );
preparedStatement.close();
}
@Test
public void test07() throws SQLException, IOException {
String SQL = "select image from test_image where id = ?" ;
PreparedStatement preparedStatement = connection.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setInt( 1 , 1);
// execute 系列方法 ( 包括 批量更新 ) 都来自于 Statement 接口 。
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
byte[] bytes = resultSet.getBytes(1);
OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Pictures\\Camera Roll\\下载2.png");
os.write(bytes, 0, bytes.length);
os.flush();
os.close();
preparedStatement.close();
}