Blob编程示例

BLOB一次性读写数据

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

char buff[10] = "abcdefgh";
char rbuff[20] = {0};
stmt->executeQuery("drop table blob_test");
stmt->executeQuery("create table blob_test (id int, b blob)");
stmt->executeQuery("insert into blob_test values (1, empty_blob())");
ResultSet *rs = stmt->executeQuery("select b from blob_test");

/*写数据*/
rs->next();
b = rs->getBlob(1);
b.open();
st = b.getStream();
st->writeBuffer(buff, 8);// status = READY_FOR_WRITE
b.closeStream(st);

/*读取数据*/
st = b.getStream(1, 8);
int rs = st->readBuffer(rbuff, 16);// rs = 8,rbuff="abcdefgh"
b.closeStream(st);

stmt->closeResultSet(rs);
stmt->executeQuery("drop table clob_test");

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

BLOB分片读写数据

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

char buff[10] = "abcdefgh";
char rbuff[20] = {0};
stmt->executeQuery("drop table blob_test");
stmt->executeQuery("create table blob_test (id int, b blob)");
stmt->executeQuery("insert into blob_test values (1, empty_blob())");
ResultSet *rs = stmt->executeQuery("select b from blob_test");

/*第一次数据*/
rs->next();
b = rs->getBlob(1);
b.open();
st = b.getStream();
st->writeBuffer(buff, 4);// status = READY_FOR_WRITE

/*再次写数据*/
st->writeLastBuffer(buff, 4);// status = INACTIVE
b.closeStream(st);

/*第一次读取数据*/
st = b.getStream(1, 8);
int rs = st->readBuffer(rbuff, 8);// rs = 4,rbuff="abcd"
/*再次读取数据*/
rs = st->readBuffer(rbuff, 8);//rs=4,rbuff="efgh" status = INACTIVE
b.closeStream(st);

stmt->closeResultSet(rs);
stmt->executeQuery("drop table clob_test");

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