Как конвертировать Blob в строку и String в Blob в Java
Я пытаюсь получить строку из BLOB-типа данных с помощью
Blob blob = rs.getBlob(cloumnName[i]);
byte[] bdata = blob.getBytes(1, (int) blob.length());
String s = new String(bdata);
Он работает нормально, но когда я собираюсь конвертировать String
в Blob
и пытается вставить в базу данных, то ничего не вставляя в базу данных. Я использовал приведенный ниже код для преобразования String в Blob:
String value = (s);
byte[] buff = value.getBytes();
Blob blob = new SerialBlob(buff);
Может ли кто-нибудь помочь мне о преобразовании Blob
в String
а также String
в Blob
на яве?
6 ответов
Попробуйте это (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();
он может работать даже без BLOB, драйвер автоматически преобразует типы:
ps1.setBytes(1, str.getBytes);
ps1.setString(1, str);
Кроме того, если вы работаете с текстом, CLOB кажется более естественным типом col
Используйте это, чтобы конвертировать String в Blob. Где соединение - это соединение с объектом БД.
String strContent = s;
byte[] byteConent = strContent.getBytes();
Blob blob = connection.createBlob();//Where connection is the connection to db object.
blob.setBytes(1, byteContent);
Как вы устанавливаете BLOB в БД? Ты должен сделать:
//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();
И вот мое решение, которое всегда работает для меня
StringBuffer buf = new StringBuffer();
String temp;
BufferedReader bufReader = new BufferedReader(new InputStreamReader(myBlob.getBinaryStream()));
while ((temp=bufReader.readLine())!=null) {
bufappend(temp);
}
Вот мое решение:
Получите столбец BLOB-объекта из базы данных и передайте его указанному ниже методу.
public static String blobToString(BLOB blob) throws Exception {
byte[] data = new byte[(int) blob.length()];
BufferedInputStream instream = null;
try {
instream = new BufferedInputStream(blob.getBinaryStream());
instream.read(data);
} catch (Exception ex) {
throw new Exception(ex.getMessage());
} finally {
instream.close();
}
int chunk = 65536;
ByteArrayInputStream bis = new ByteArrayInputStream(data);
GZIPInputStream gis = new GZIPInputStream(bis);
int length = 0;
byte[] buffer = new byte[chunk];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((length = gis.read(buffer, 0, chunk)) != -1) {
bos.write(buffer, 0, length);
}
gis.close();
bis.close();
bos.close();
String str = bos.toString();
System.out.println(str);
return str;
}
Чтобы преобразовать Blob в String в Java:
byte[] bytes = baos.toByteArray();//Convert into Byte array
String blobString = new String(bytes);//Convert Byte Array into String