我有一张甲骨文的桌子。在该表中,列之一是存储clob数据。在clob列中,必须插入对象作为clob。
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;
public class TestOracleClob implements Serializable{
public static void main(String[] args)
{
//create table test (id integer,content clob);
System.out.println("-------------------insert -----------------");
try{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con = DriverManager.getConnection ("oracle server",
"loginid", "loginpassword");
//Class.forName("oracle.jdbc.driver.OracleDriver");
con.setAutoCommit(false);
//Ok 1
String sql="insert into test values(1,empty_clob())";
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
System.out.println("-------------------insert -----------------");
String sqll="select content from test where id=1 for update";
ResultSet rss=stmt.executeQuery(sqll);
if(rss.next()){
//CLOB clob = ((OracleResultSet)rss).getCLOB(1);
oracle.sql.CLOB clob= (oracle.sql.CLOB)rss.getClob("content");
clob.putString(1,"here is a string which contains more than 4000 character");
sql="update test set content=? where id=1";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setClob(1,clob);
pstmt.executeUpdate();
pstmt.close();
}
con.commit();
//Ok 2
//String sql1="insert into test values(2,empty_clob())";
//ResultSet rs3=stmt.executeQuery(sql1);
String sql12="insert into test values(?,?)";
PreparedStatement pstmt1=con.prepareStatement(sql12);
pstmt1.setInt(1,2);
pstmt1.setClob(2,oracle.sql.CLOB.empty_lob());
pstmt1.executeUpdate();
String sqll2="select content from test where id=2 for update";
ResultSet rss2=stmt.executeQuery(sqll2);
if(rss2.next()){
CLOB clob = ((OracleResultSet)rss2).getCLOB(1);
clob.putString(1,"affffffffffdfdfdfdddddddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdddfff");
String sql1="update test set content=? where id=2";
PreparedStatement pstmt=con.prepareStatement(sql1);
pstmt.setClob(1,clob);
pstmt.executeUpdate();
pstmt.close();
}
con.commit();
rss.close();
rss2.close();
pstmt1.close();
rs.close();
stmt.close();
con.close();
System.out.println("-------------insert ok-------------");
}catch(Exception e){
System.out.println("insert:"+e);
}
System.out.println("-------------------query -----------------");
try{
String content="";
//Class.forName("oracle.jdbc.driver.OracleDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection con = DriverManager.getConnection ("oracleserver",
"id", "pass");
Statement stmt=con.createStatement();
String sql="select content from test where id=1";
ResultSet rs=stmt.executeQuery(sql);
if(rs.next()){
CLOB clob = ((OracleResultSet)rs).getCLOB(1);
if(clob!=null){
Reader is=clob.getCharacterStream();
BufferedReader br=new BufferedReader(is);
String s=br.readLine();
while(s!=null){
content+=s+",";
s=br.readLine();
}
}
}
rs.close();
stmt.close();
con.close();
System.out.println("clob:"+content);
System.out.println("-------------query ok-------------");
}catch(Exception ee){
System.out.println("Exception:"+ee);
}
}
}
但是他们在CLOB中添加了字符串。但是我想把我的对象添加到CLOB中。有可能吗?
提前感谢你的帮助。
我想您可以直接将对象序列化到clob中,如下所示:
Object o = new Object(); // anything serializable
ObjectOutputStream out = new ObjectOutputStream(clob.setAsciiStream(0));
out.writeObject(o);
out.close();
反之亦然:
ObjectInputStream in = new ObjectInputStream(clob.getAsciiStream());
Object o = in.readObject();
in.close();
我有一个超过5000个字符的字符串,我想用MyBatis将其保存为XMLTYPE。为此,我做了以下工作: 我在将字符串转换为CLOB时遇到了问题。 如果以第一种方式进行,则创建的CLOB对象是一个SerialClob有3个字段:BUF、LENG和CLOB;但是在这三个字段中,只有两个字段被填充:BUF(buffer)和LENG,但是CLOB是null。 但是如果我用第二种方法来做,我就创建了完整的
在其中一个服务中,我们执行一些操作: 更新表A-使用带注释的查询调用方法,来自存储库的方法,扩展了JParePository。 从表B中选择(repository.findone(B_PK)) 修改从点2检索的对象 将修改的对象另存为新实体(repository.save(B_Object))
问题内容: 我在伪操作环境中工作,我们在收到数据后制作新图像。有时,当输入新数据时,我们需要重新打开图像并更新该图像以创建合成,添加叠加等。除了添加到图像之外,还需要修改标题,图例等。 matplotlib中有内置的东西可以让我存储和重新加载matplotlib.pyplot对象以供以后使用吗?它需要保持对所有相关对象(包括图形,线条,图例等)的访问。也许咸菜是我想要的,但我对此表示怀疑。 问题答
问题内容: 这就是事情- 我想在特定键下的redis中存储本机JS(node.js)对象(闪存套接字引用)。当我简单地做到这一点时,它存储为一个字符串。当我尝试获得价值时,我得到的只是一个字符串。 有机会工作吗?这是我的代码: 问题答案: 下载者:这里的上下文是SET命令,可以存储任意对象。 不,你不能那样做。您应该接受以下事实:Redis将所有内容存储为字符串(毕竟,协议是基于文本的)。Redi
问题内容: 我需要保存一个用户模型,例如: 今天,我使用一个Set:users 在这个Set中,我有一个类似于user:alan的 成员在这个成员中,我上面有哈希 这很好,但是我只是想知道是否可以使用以下方法代替上述方法: 仍使用用户集(以轻松获取用户(成员)列表) 在此集中,仅使用键/值存储,例如: 键:alan值:上述用户哈希的字符串化版本 这样,检索记录将变得更加容易(然后我将不得不使用JS