【问题标题】:Convert String to Clob in Java在 Java 中将字符串转换为 Clob
【发布时间】:2012-07-10 17:46:23
【问题描述】:

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

我需要一些实用程序,例如

 public Clob getClob(String data){

 }

谁能告诉我怎么做这个。

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

【问题讨论】:

  • 为什么“[你]不能有 ConnectionManager”?你能用LobCreator吗?

标签: java sql string clob


【解决方案1】:

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

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

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

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

祝你好运!

【讨论】:

    【解决方案2】:

    如果您使用的是 spring boot,并且您只有一个 JdbcTemplate obj,您可以使用以下方法获得 Oracle 连接:

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

    【讨论】:

      【解决方案3】:

      在我这边,我使用

      Clob generateProxy(String string)
      

      来自

      import org.hibernate.engine.jdbc.ClobProxy;
      

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          并且需要这个导入:

          import oracle.jdbc.driver.OracleConnection;
          

          【讨论】:

            【解决方案6】:

            试试这个:

            OracleConnection conn;  // initialize this first
            
            CLOB clob = conn.createClob();
            
            public Clob getClob(String data){
            
                return clob.setString(position, data);
            }
            

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

              • 正是我要找的 ;-)
              • 在我的例子中,我从 java 存储函数返回了clob,但是得到了这个错误 - ORA-00932: 不一致的数据类型:期望返回值是可转换为 Oracle 类型的用户定义 Java 类的实例,得到一个无法转换的对象
              【解决方案8】:

              抛出警告: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);
              }
              

              【讨论】:

                猜你喜欢
                • 2011-01-17
                • 2013-10-02
                • 1970-01-01
                • 2023-03-27
                • 2013-07-05
                • 2016-04-06
                • 1970-01-01
                • 2012-08-10
                • 2023-03-19
                相关资源
                最近更新 更多