您好,欢迎来到九壹网。
搜索
您的当前位置:首页Oracle中插入图片并显示(用BLOB类型) !! (测试可用!!!)

Oracle中插入图片并显示(用BLOB类型) !! (测试可用!!!)

来源:九壹网


示例一:

Oracle中插入图片并显示(用BLOB类型)

要在oracle里面存入图片 用 blob类型

首先在数据库里建立:

--连接到管理员

conn sys/tbsoft as sysdba;

--为scott用户授权

grant create any directory to scott;

--回到scott用户

conn scott/tiger;

--创建存储图片的表

CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);

--创建存储图片的目录

CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\\picture';

--在c:下自己建一个叫picture的文件夹

CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS

F_LOB BFILE;--文件类型

B_LOB BLOB;

BEGIN

--插入空的blob

iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)

VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;

--获取指定目录下的文件

F_LOB:= BFILENAME ('IMAGES', FILENAME);

--以只读的方式打开文件

DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY);

--传递对象

DBMS_LOB.LOADFROMFILE (F_LOB));

(B_LOB, F_LOB,DBMS_LOB.GETLENGTH

--关闭原始文件

DBMS_LOB.FILECLOSE (F_LOB);

COMMIT;

END;

/

--在C:\\picture下放一张图片1.gif

--将该图片存入表

call IMG_INSERT('1','1.gif');

然后创建一个web项目 连接数据库后 创建一个BlobDAO类 用来取出表中的blob类型图片

Java代码 收藏代码

public class BlobDAO {

private static final BlobDAO instance = new BlobDAO();

private Connection conn = null;

private BlobDAO() {

}

public static BlobDAO getInstance() {

return instance;

}

private void initConn() {

conn = DBAccess.getInstance().getConn();

}

public byte[] getImage(String imgname) {

BufferedInputStream ins;//取得BLOB的IO流

byte[] bt = null;

initConn();

Blob bo = null;

PreparedStatement ps = null;

ResultSet rs = null;

String sql = \"select T_IMAGE from IMAGE_LOB where t_id=?\";

try {

ps = conn.prepareStatement(sql);

ps.setString(1, imgname);

rs = ps.executeQuery();

if (rs.next()) {

bo = rs.getBlob(\"T_IMAGE\");

try {

ins = new BufferedInputStream(bo.getBinaryStream());

int bufferSize = (int) bo.length();//取得BLOB的长度

bt = new byte[bufferSize];

try {

ins.read(bt, 0, bufferSize);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//建立字节缓存

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

rs.close();

ps.close();

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return bt;

}

}

在action里面调用getImage()方法并显示图片在页面上

Java代码 收藏代码

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

// TODO Auto-generated method stub

BlobDAO blobDAO = BlobDAO.getInstance();

byte[] bs = blobDAO.getImage(\"1\");

try {

response.getOutputStream().write(bs);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

添加图片到数据库

请在c盘下放入图片--c:\\\\4.gif

Java代码 收藏代码

public void savaImg(String imgId) {

//传的是存入数据库图片的id

initConn();

Statement st = null;

BLOB blob = null; //图片类型

OutputStream outputStream = null; //输出流

File file = null; //文件

InputStream inputStream = null; //输入流

ResultSet rs = null;

try {

conn.setAutoCommit(false); //事物由程序员操作

st = conn.createStatement();

st.executeQuery(\"insert into IMAGE_LOB values('\"+ imgId

+\"',empty_blob())\");

rs = st.executeQuery(\"select T_IMAGE from IMAGE_LOB where t_id='\"+ imgId +\"' for update\");

if (rs.next()) {

blob = (BLOB) rs.getBlob(1);

outputStream = blob.getBinaryOutputStream();

file = new File(\"c:\\\\4.gif\");

inputStream = new FileInputStream(file);

byte[] b = new byte[blob.getBufferSize()];

int len = 0;

while ((len = inputStream.read(b)) != -1) {

System.out.println(len);

outputStream.write(b, 0, len);

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

try {

inputStream.close();

outputStream.flush();

outputStream.close();

rs.close();

st.close();

conn.commit();

conn.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

操作完毕!

示例二:

插入oracle blob

1. package db;

2. import java.io.BufferedInputStream;

3. import java.io.FileInputStream;

4. import java.io.PrintStream;

5. import java.sql.Connection;

6. import java.sql.DriverManager;

7. import java.sql.ResultSet;

8. import java.sql.SQLException;

9. import java.sql.Statement;

10.

11. public class Test {

12. private Connection conn;

13.

14. /**

15. * 得到一个数据库的连接

16. *

17. * @return 返加Connection对象

18. */

19. public Connection getConnection() {

20. try {

21. Class.forName(\"oracle.jdbc.driver.OracleDriver\");

22. conn = DriverManager.getConnection(

23. \"jdbc:oracle:thin:@IP地址:1521:实例\用户名\密码\");

24. } catch (ClassNotFoundException e) {

25. e.printStackTrace();

26. } catch (SQLException e) {

27. e.printStackTrace();

28. }

29. return conn;

30. }

31.

32. /**

33. * 向表中插入二进制数据

34. * @param path数据所在的路径

35. * @return 成功或失败

36. */

37. public int insertImage(String path) throws Exception {

38. int i = 0;

39. Statement st = null;

40. ResultSet rs = null;

41. conn=this.getConnection();

42.

43. conn.setAutoCommit(false);//设置数据库为不自动提交,必须

44. st = conn.createStatement();

45. //先插入一个空对象,这里插入Empty_BLOB()函数 stuid text

46. i = st.executeUpdate(\"insert into testbo(stuid,text) values(1,Empty_BLOB())\");

47. 48. te\");

49. 50. 51. 52. 53.

54. 55. 56. 57. //进行行级锁

rs = st.executeQuery(\"select text from testbo where stuid=1 for upda if (rs.next()) {

//得到流

oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);

//从得到的低级流构造一个高级流

PrintStream ps = new PrintStream(blob.getBinaryOutputStream()); BufferedInputStream bis = new BufferedInputStream(

new FileInputStream(path));

byte[] buff = new byte[512];

int n = 0;

58. //从输入到输出

59. while ((n = bis.read(buff)) != -1) {

60. ps.write(buff, 0, n);

61. }

62. //清空流的缓存

63. ps.flush();

. //关闭流,注意一定要关

65. ps.close();

66. bis.close();

67. }

68. rs.close();

69. st.close();

70. conn.close();

71. return i;

72. }

73.

74. public static void main(String[] args) throws Exception {

75. Test test=new Test();

76. test.insertImage(\"C:/MyDocuments/kettledemo/ANKG.SN.2008309124211.00.BHZ\");

77. System.out.println(\"YES\");

78. }

79. }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务