2013-07-01 11 views
19

Próbuję uzyskać ciąg od typu danych BLOB za pomocąJak przekonwertować Blob String i String do Blob w java

Blob blob = rs.getBlob(cloumnName[i]); 
byte[] bdata = blob.getBytes(1, (int) blob.length()); 
String s = new String(bdata); 

To działa dobrze, ale kiedy idę do konwersji String do Blob i próbuje wstawić do bazy danych, a następnie nic nie wstawia do bazy danych. Użyłem poniżej kod do konwersji String do Blob:

String value = (s); 
byte[] buff = value.getBytes(); 
Blob blob = new SerialBlob(buff); 

Czy ktoś może mi pomóc o do konwersji z Blob do String i String do Blob w Java?

+1

Po pierwsze, upewnij się, że korzystasz z właściwego terminu: jest to blob, a nie blog. Dostaniesz dużo więcej dzięki wyszukiwarkom internetowym, gdy użyjesz właściwej nazwy. Po drugie, obiekty typu blob są przeznaczone dla danych * binarnych *, a nie * tekstowych *. Idealnie nie powinieneś używać ich do danych tekstowych, a jeśli tak, powinieneś podać kodowanie (np. UTF-8) podczas konwersji danych tekstowych na dane binarne. –

Odpowiedz

0

W jaki sposób ustawiasz blob na DB? należy zrobić:

//imagine u have a a prepared statement like: 
PreparedStatement ps = conn.prepareStatement("INSERT INTO table VALUES (?)"); 
String blobString= "This is the string u want to convert to Blob"; 
oracle.sql.BLOB myBlob = oracle.sql.BLOB.createTemporary(conn, false,oracle.sql.BLOB.DURATION_SESSION); 
byte[] buff = blobString.getBytes(); 
myBlob.putBytes(1,buff); 
ps.setBlob(1, myBlob); 
ps.executeUpdate(); 
+2

Po pierwsze, OP nigdy nie zastrzegł, że używa Oracle RDMS. Jeśli nie, ten kod się nie skompiluje. –

1

Służy do konwersji String do blob. Gdzie połączenie jest połączeniem z obiektem db.

String strContent = s; 
    byte[] byteConent = strContent.getBytes(); 
    Blob blob = connection.createBlob();//Where connection is the connection to db object. 
    blob.setBytes(1, byteContent); 
6

spróbuj tego (A2 BLOB col)

PreparedStatement ps1 = conn.prepareStatement("update t1 set a2=? where id=1"); 
Blob blob = conn.createBlob(); 
blob.setBytes(1, str.getBytes()); 
ps1.setBlob(1, blob); 
ps1.executeUpdate(); 

może działać nawet bez BLOB, kierowca zmieni typy automatycznie:

ps1.setBytes(1, str.getBytes); 
    ps1.setString(1, str); 

Poza tym, jeśli pracujesz z CLOB tekstu wydaje być bardziej naturalnym kol typu