借助PreparedStatement, 我们可以检索图像并将其存储在数据库中。
PreparedStatement的getBlob()方法用于获取二进制信息, 它返回Blob的实例。在blob对象上调用getBytes()方法之后, 我们可以获得可以写入图像文件的二进制信息数组。
PreparedStatement的getBlob()方法的签名
public Blob getBlob()throws SQLException
Blob接口的getBytes()方法的签名
publicbyte[] getBytes(long pos, int length)throws SQLException
我们假设图像存储在imgtable中。
CREATE TABLE"IMGTABLE"
( "NAME" VARCHAR2(4000), "PHOTO" BLOB
)
/
现在, 让我们编写代码以从数据库检索图像并将其写入目录, 以便可以显示它。
在AWT中, 可以通过Toolkit类显示它。在servlet, jsp或html中, 可以通过img标签显示它。
import java.sql.*;
import java.io.*;
public class RetrieveImage {
public static void main(String[] args) {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
PreparedStatement ps=con.prepareStatement("select * from imgtable");
ResultSet rs=ps.executeQuery();
if(rs.next()){//now on 1st rowBlob b=rs.getBlob(2);
//2 means 2nd column data
byte barr[]=b.getBytes(1, (int)b.length());
//1 means first imageFileOutputStream fout=new FileOutputStream("d:\\sonoo.jpg");
fout.write(barr);
fout.close();
}//end of if
System.out.println("ok");
con.close();
}catch (Exception e) {e.printStackTrace();
}
}
}
【从Oracle数据库检索图像的示例】现在, 如果你看到d驱动器, 就会创建sonoo.jpg图像。
推荐阅读
- Java中的ArrayIndexOutOfBoundsException
- Android开发——diglog cancel与dismiss方法区别
- CSAPP 3e: Bomb lab (phase_4)
- 上传到App Store时5.5寸图和iPad pro图报错
- 酷划锁屏手机赚钱APP的使用经验分享
- 如何导出android内部存储的文件(不用root)
- Android开发——Toast知识
- CSAPP 3e: Bomb lab (phase_2) + lab中的GDB 使用
- CSAPP 3e: Bomb lab (phase_1)