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);