假设我有一个班级:
class EventTransaction {
.....
private Clob dataXML;
public Clob getDataXML() {
return dataXML;
}
public void setDataXML(Clob dataXML) {
this.dataXML = dataXML;
}
}
和Hibernate映射xml:
<property name="dataXML" type="java.sql.Clob">
<column name="XML" sql-type="CLOB"/>
</property>
在java代码中,如何将String转换为Clob,反之亦然,以保存到数据库中:
Ex: EventTransaction et = new EventTransaction();
String xml = "fdfsafafafa";
et.setDataXML(convertStringToClob(xml));
HibernateTemplate.saveOrUpdate(et);
请问你如何实现函数 convertStringToClob (字符串数据);
谢谢,
答案 0 :(得分:14)
这样做
@Column(name='xml')
@Lob
private String dataXML;
public String getDataXML() {
return dataXML;
}
public void setDataXML(String dataXML) {
this.dataXML = dataXML;
}
所以没有必要转换,一切都是由Hibernate完成的。
我使用注释显示它,使用.hbm.xml
文件可以完成同样的事情。
答案 1 :(得分:5)
这是我很久以前将Clob转换为String的代码。它意味着在实用程序类中使用。
public static String convertClobToString(Clob clob) throws IOException, SQLException {
Reader reader = clob.getCharacterStream();
int c = -1;
StringBuilder sb = new StringBuilder();
while((c = reader.read()) != -1) {
sb.append(((char)c));
}
return sb.toString();
}
如果我没有弄错,要创建一个Clob,你会做这样的事情
Clob myClobFile = new SerialClob("my string".toCharArray());
答案 2 :(得分:0)
当您将XML列声明为VARCHAR(而不是Java String)时,数据库端有64000个字符的限制,因此只要您的列XML是CLOB,它就可以工作。
摘录工作代码:
实体:
private String xml;
SQL(ORACLE):
XML CLOB,
Hibernate映射:
<property name="xml" type="java.lang.String">
<column name="XML" length="999999" />
</property>
如果要将XML存储为文件,则应该使用BLOB,如下所示:
实体:
private byte[] xmlFile;
SQL(ORACLE):
XML BLOB,
Hibernate映射:
<property name="xmlFile" type="java.io.File">
<column name="XML" />
</property>