使用JDBC setString()将CLOB数据类型与Oracle数据库一起存储是否安全?

时间:2019-05-02 19:24:42

标签: java oracle jdbc prepared-statement clob

我需要将一个大字符串存储到Oracle数据库中,该字符串的长度最多为10000个字节。我知道Oracle 12c中有一些配置可以增加varchar2的4000字节限制。但是我没有选择使用该配置。

因此,我倾向于使用CLOB数据类型。我以前没有使用CLOB的经验。所以我有担心。

我在SO上看到了以下内容

Java: How to insert CLOB into oracle database

我不想使用任何Oracle软件包来处理CLOB类型。我的问题是,以下内容对我而言足够安全吗?

要存储:

try {
    String myclobstring = "xx ........"; 
    String sql = "Insert into mytable (clobfield) values (?)";
    Statement stmt = conn.prepareStatement(sql);
    stmt.setString(1, myclobstring); 
    .
    .
}

要检索:

try {
    String sql = "select clobfield from mytable";
    stmt = conn.createStatement();
    ResultSet result = stmt.executeQuery(sql);
    String s = result.getString ("clobfield');
    .
    .
}

2 个答案:

答案 0 :(得分:0)

您可以将CLOB创建为字符串,尽管对于很大的东西使用stmt.setCharacterStream可能会更好。这是我发现的一个例子,很好地显示了这一点: Storing Clobs

如果不想使用Oracle特定代码,也可以使用java.sql.Clob。

From Oracle's documentation on CLOB 使用java.sql.Clob并通过连接的createClob函数创建CLOB。

答案 1 :(得分:0)

我认为我会发布答案,因为我没有看到明确的答案。到目前为止,setString()/ setString()最多可将10K个字符存储到CLOB字段中。我可以毫无问题地找回存储的东西。

我确实看到了以下相关的SO帖子,这使我更加自信。

How to use setClob() in PreparedStatement inJDBC