Sergio:
sollten Sie BLOB verwenden. Es ist ziemlich geradlinig mit JDBC.
Das Problem mit dem zweiten Code, den Sie gepostet haben, ist die Codierung. Sie sollten zusätzlich die Bytes codieren, um sicherzustellen, dass keine von ihnen fehlschlägt.
Wenn Sie es immer noch in einen String schreiben möchten, können Sie die Bytes mit java.util.Base64 codieren.
Immer noch sollten Sie CLOB als Datentyp verwenden, weil Sie nicht wissen, wie lange die serialisierten Daten sein werden.
Hier ist ein Beispiel, wie man es benutzt.
import java.util.*;
import java.io.*;
/**
* Usage sample serializing SomeClass instance
*/
public class ToStringSample {
public static void main(String [] args) throws IOException,
ClassNotFoundException {
String string = toString(new SomeClass());
System.out.println(" Encoded serialized version ");
System.out.println(string);
SomeClass some = (SomeClass) fromString(string);
System.out.println("\n\nReconstituted object");
System.out.println(some);
}
/** Read the object from Base64 string. */
private static Object fromString(String s) throws IOException ,
ClassNotFoundException {
byte [] data = Base64.getDecoder().decode(s);
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream( data));
Object o = ois.readObject();
ois.close();
return o;
}
/** Write the object to a Base64 string. */
private static String toString(Serializable o) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
}
/** Test subject. A very simple class. */
class SomeClass implements Serializable {
private final static long serialVersionUID = 1; // See Nick's comment below
int i = Integer.MAX_VALUE;
String s = "ABCDEFGHIJKLMNOP";
Double d = new Double(-1.0);
public String toString(){
return "SomeClass instance says: Don't worry, "
+ "I'm healthy. Look, my data is i = " + i
+ ", s = " + s + ", d = " + d;
}
}
Ausgang:
C:\samples>javac *.java
C:\samples>java ToStringSample
Encoded serialized version
rO0ABXNyAAlTb21lQ2xhc3MAAAAAAAAAAQIAA0kAAWlMAAFkdAASTGphdmEvbGFuZy9Eb3VibGU7T
AABc3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwf////3NyABBqYXZhLmxhbmcuRG91YmxlgLPCSilr+w
QCAAFEAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cL/wAAAAAAAAdAAQQUJ
DREVGR0hJSktMTU5PUA==
Reconstituted object
SomeClass instance says: Don't worry, I'm healthy. Look, my data is i = 2147483647, s = ABCDEFGHIJKLMNOP, d = -1.0
HINWEIS: für Java 7 und früher können Sie die ursprüngliche answer here
+1 für viel Mühe in diese Antwort. –
+1, wenn Sie wirklich Zeichenfolgen benötigen, dann ist base64 + clob der Weg zu gehen. –
+1, Kleine Verbesserung. Besser die Schnittstelle Serializable anstelle von plain Object in der Methode toString() zu verwenden: private static String toString (Serializable object) – zinovii