java讀取圖像文件存入oracle中blob字段源代碼
最近因為要做點東西很少寫文章了。尤其是技術類的文章。
在網(wǎng)上看了很多關于Java對blob字段的操作。
自己也嘗試著寫了個,
自己也修改了部分。
代碼寫得很亂。
數(shù)據(jù)庫:oracle 10G XE
數(shù)據(jù)源驅(qū)動:jdbc12.jar
文件名:WriteBlob
數(shù)據(jù)庫中建立一個為clobtest的表,內(nèi)有兩個字段,name (varchar2(20)),content(blob)。
1
package dbdriver;
2
3
/**
4
* 2008-09-28
5
* @author duduli
6
* email: lxyzj2000@gmail.com
7
*/
8
import java.sql.*;
9
import java.io.*;
10
import oracle.sql.*;
11
12
public class WriteBlob {
13
14
public static void main(String[] args) {
15
try {
16
String fName2 = "";
17
String fileName = "E:\\jianxin.bmp";
18
//E盤下游個jianxin.bmp的圖像文件
19
File f = new File(fileName);
20
String fName = f.getName();
21
int i = fName.lastIndexOf('.');
22
if (i > 0 && i < fName.length()-1){
23
fName2 = fName.substring(0,i);
24
}
25
System.out.println(fName2);
26
//獲得文件名,出去后綴的文件名。
27
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
28
Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:XE", "system", "duduli ");
29
conn.setAutoCommit(false);
30
BLOB blob = null;
31
PreparedStatement pstmt = conn.prepareStatement("insert into blobtest(name,content) values(?,empty_blob())");
32
pstmt.setString(1, fName2);
33
pstmt.executeUpdate();
34
pstmt.close();
35
pstmt = conn.prepareStatement("select content from blobtest where name= ? for update");
36
pstmt.setString(1, fName2);
37
ResultSet rset = pstmt.executeQuery();
38
if (rset.next()) {
39
blob = (BLOB) rset.getBlob(1);
40
}
41
42
FileInputStream fin = new FileInputStream(f);
43
System.out.println("file size = " + fin.available());
44
pstmt = conn.prepareStatement("update blobtest set content=? where name=?");
45
OutputStream out = blob.getBinaryOutputStream();
46
byte[] data = new byte[(int) fin.available()];
47
fin.read(data);
48
out.write(data);
49
fin.close();
50
out.close();
51
pstmt.setBlob(1, blob);
52
pstmt.setString(2, fName2);
53
pstmt.executeUpdate();
54
pstmt.close();
55
conn.commit();
56
conn.close();
57
} catch (SQLException e) {
58
System.err.println(e.getMessage());
59
e.printStackTrace();
60
} catch (IOException e) {
61
System.err.println(e.getMessage());
62
}
63
}
64
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

posted on 2008-10-02 21:08 duduli 閱讀(5815) 評論(3) 編輯 收藏 所屬分類: java