Java:如何将CLOB插入oracle数据库

Ian*_*the 16 java oracle insert clob

我需要将XML文件内容写入oracle数据库,其中列是CLOB数据类型.我该怎么做?

Luk*_*der 27

最简单的方法就是简单地使用

stmt.setString(position, xml);
Run Code Online (Sandbox Code Playgroud)

方法(用于"小"字符串,可以很容易地保存在Java内存中),或者

try {
  java.sql.Clob clob = 
    oracle.sql.CLOB.createTemporary(
      connection, false, oracle.sql.CLOB.DURATION_SESSION);

  clob.setString(1, xml);
  stmt.setClob(position, clob);
  stmt.execute();
}

// Important!
finally {
  clob.free();
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 11

大约有100行代码;-) 这是一个例子.

要点:与其他JDBC驱动程序不同,Oracle中的驱动程序不支持使用ReaderInputStream作为参数INSERT.相反,你必须SELECTCLOBFOR UPDATE,然后写入到ResultSet

我建议您将此代码移动到辅助方法/类中.否则,它将污染您的其余代码.


Tom*_*olk 5

这段代码对我有用。我使用ojdbc6-11.2.0.2.jar。

java.sql.Connection con;
javax.xml.bind.Marshaller marshaller;

Clob xmlClob = con.createClob();
try {
  try (Writer xmlClobWriter = xmlClob.setCharacterStream(1)) {
    m.marshal(jaxbObject, xmlClobWriter);
  } // xmlClobWriter.close();
  try (PreparedStatement stmt = con.prepareStatement("INSERT INTO table (xml) values(?)")) {
    stmt.setClob(1, xmlClob);
    stmt.executeUpdate();
  }
} finally {
  xmlClob.free();
}
Run Code Online (Sandbox Code Playgroud)