Clob编程示例

Clob一次性读写数据

/*创建环境句柄、到数据库的连接 和 statement*/
Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection(user,pwd,link);
Statement *stmt = conn->createStatement();

char buff[10] = "abcdefgh";
stmt->executeQuery("drop table clob_test");
stmt->executeQuery("create table clob_test (id int, b clob)");
stmt->executeQuery("insert into clob_test values (1, empty_clob())");
ResultSet *rs = stmt->executeQuery("select b from clob_test");
rs->next();
Clob b = rs->getClob(1);

/*写数据*/
rs->next();
b = rs->getClob(1);
b.open();
st = b.getStream();
st->writeBuffer(buff, 3);//当前status应为:READY_FOR_WRITE
stmt->closeResultSet(rs);

/*读取数据*/
char rbuff[20] = {0};
st = b.getStream(1, 3);
int rs = st->readBuffer(rbuff, 6);// 一次性读取完毕
//rs=3,rbuff="abc",status=INACTIVE

rs = st->readBuffer(rbuff, 2);// 再次读取失败返回-1

b.closeStream(st);
stmt->closeResultSet(rs);
stmt->executeQuery("drop table clob_test");

/*释放statement、数据库连接 和 环境句柄*/
conn->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);

Clob分片读写数据

/*创建环境句柄、到数据库的连接 和 statement*/
Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection(user,pwd,link);
Statement *stmt = conn->createStatement();

char buff[10] = "abcdefgh";
stmt->executeQuery("drop table clob_test");
stmt->executeQuery("create table clob_test (id int, b clob)");
stmt->executeQuery("insert into clob_test values (1, empty_clob())");
ResultSet *rs = stmt->executeQuery("select b from clob_test");
rs->next();
Clob b = rs->getClob(1);

/*第一次写数据*/
rs->next();
b = rs->getClob(1);
b.open();
st = b.getStream();
st->writeBuffer(buff, 4);//当前status应为:READY_FOR_WRITE

/*再次写入数据*/
st->writeBuffer(buff+4, 4);
b.closeStream(st);
stmt->closeResultSet(rs);

/*读取数据*/
char rbuff[20] = {0};
st = b.getStream(1, 8);
int rs = st->readBuffer(rbuff, 8);// 第一次读取数据
//rs=4,rbuff="abcd",status=READY_FOR_WRITE
// 再次读取数据
rs = st->readBuffer(rbuff, 8);//rs=4,rbuff="efgh",status=READY_FOR_WRITE

b.closeStream(st);
stmt->closeResultSet(rs);
stmt->executeQuery("drop table clob_test");

/*释放statement、数据库连接 和 环境句柄*/
conn->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);