在Java中将String转换为Clob

时间:2012-07-11 06:48:05

标签: java sql string clob

我有一种情况需要从String中创建Clob对象。 问题是我不能在该方法中使用ConnectionManager。

我需要像

这样的实用程序
 public Clob getClob(String data){

 }

任何人都可以告诉我如何才能做到这一点。

我也有oralce.sql.CLOB。但是它需要Connection才能创建对象。

8 个答案:

答案 0 :(得分:10)

引发警告:Clob未初始化。

您需要OracleConnection才能使用Oracle数据库创建Clob。

OracleConnection conn;  // initialize this first

Clob myClob = conn.createClob();



private OracleConnection conn = null;
public void setConnection( OracleConnection conn )
{
    this.conn = conn;
}

void setClob( String cookie ) throws SQLException
{
    Clob myClob = conn.createClob();
    myClob.setString( 1, cookie);
}

答案 1 :(得分:6)

那些仍在寻找替代答案的人,可以在不需要连接对象的情况下创建Clob对象,如下所示。

Clob myClob = new javax.sql.rowset.serial.SerialClob(stringData.toCharArray());

答案 2 :(得分:5)

试试这个:

OracleConnection conn;  // initialize this first

CLOB clob = conn.createClob();

public Clob getClob(String data){

    return clob.setString(position, data);
}

答案 3 :(得分:1)

为了初始化此处其他答案中提到的OracleConnection   并且如果您正在为Java存储过程执行此操作   并且连接到存储该过程的数据库, 然后可以像这样初始化Connection:

Connection conn = DriverManager.getConnection("jdbc:default:connection:");

并且此导入是必需的:

import oracle.jdbc.driver.OracleConnection;

答案 4 :(得分:1)

如果您使用的是Spring Boot,并且只有JdbcTemplate obj,则可以使用以下方式获得Oracle连接:

private JdbcTemplate  jdbcTemplate;   // or NamedParameterJdbcTemplate 
Clob myClob = this.jdbcTemplate.getJdbcTemplate().getDataSource().getConnection().createClob();

答案 5 :(得分:0)

如果您正在寻找机会创建没有连接的[N]Clob,则可以在Hibernate项目中使用NonContextualLobCreator。以下示例显示了使用字符串创建NCLob

String xml = "my blob content";
NClob clob = NonContextualLobCreator.INSTANCE.createNClob(xml);
entity.setXmlclob);

至少从Hibernate 4.2(可能更早)开始可用。

答案 6 :(得分:0)

我一边使用

Clob generateProxy(String string)

来自

import org.hibernate.engine.jdbc.ClobProxy;

答案 7 :(得分:0)

我遇到了与您类似的问题,我需要在字段中存储 JSON。 您不必将 BLOB 或 CLOB 用作 java 对象,但您可以将其存储为一个。

总结我的答案,如果您正在使用 ORACLE 数据库(这是一个总是会导致语言问题的数据库),请使用波纹管格式作为指南或基于 oracle 文档本身的最佳实践来解决您的问题:

@Lob @Basic(fetch=LAZY)
@Column(name="REPORT")
protected String report;

如您所见,您用来处理数据的变量在字符串中(无需转换),但它将存储为 LOB。

祝你好运!