
你应该使用BLOB。使用JDBC非常简单。
你发布的第二个代码的问题是编码。你还应该对字节进行编码,以确保它们均不会失败。
如果你仍然想将其记录为字符串,则可以使用java.util.base64对字节进行编码。
仍然应该将CLOB用作数据类型,因为你不知道序列化数据将持续多长时间。
这是一个如何使用它的示例。
import java.util.*;import java.io.*;public class ToStringSample { public static void main( String [] args ) throws IOException, ClassNotFoundException { String string = toString( new SomeClass() ); System.out.println(" Enpred serialized version " ); System.out.println( string ); SomeClass some = ( SomeClass ) fromString( string ); System.out.println( "nnReconstituted object"); System.out.println( some ); } private static Object fromString( String s ) throws IOException ,ClassNotFoundException { byte [] data = base64.getDeprer().depre( s ); ObjectInputStream ois = new ObjectInputStream( new ByteArrayInputStream( data ) ); Object o = ois.readObject(); ois.close(); return o; } private static String toString( Serializable o ) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream( baos ); oos.writeObject( o ); oos.close(); return base64.getEnprer().enpreToString(baos.toByteArray()); }} 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; }}输出:
C:samples>javac *.javaC:samples>java ToStringSampleEnpred serialized versionrO0ABXNyAAlTb21lQ2xhc3MAAAAAAAAAAQIAA0kAAWlMAAFkdAASTGphdmEvbGFuZy9Eb3VibGU7TAABc3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwf////3NyABBqYXZhLmxhbmcuRG91YmxlgLPCSilr+wQCAAFEAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cL/wAAAAAAAAdAAQQUJDREVGR0hJSktMTU5PUA==Reconstituted objectSomeClass instance says: Don't worry, I'm healthy. Look, my data is i = 2147483647, s = ABCDEFGHIJKLMNOP, d = -1.0
注意:对于Java 7和更早版本,你可以在此处看到原始答案
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)