处理大数据类型
二进制类型
Vastbase G100提供两种不同的方法存储二进制数据。 二进制数据可以使用二进制数据类型 BYTEA存储在表中,或者使用大对象特性以一种特殊的格式将二进制数据存储在一个独立的表中, 然后通过在表中保存一个类型为 OID 的值来引用该表。以下为这两种方法的使用示例。
使用BYTEA类型存储
1、 创建表
sql<<"create table lo_test_tab(id int, img bytea)";
2、插入数据
int v = 0x0A0B0C0D; unsigned char* b = reinterpret_cast<unsigned char*>(&v); std::string data; std::copy(b, b + sizeof(v), std::back_inserter(data)); sql << "insert into lo_test_tab values(1, :data)", use(data);
3、 读取数据
std::string byteadata; sql << "select img from lo_test_tab where id = 1",into(byteadata); cout << byteadata << endl;
使用OID存储
1、 创建表
sql<<"create table lo_test_tab (name text, img oid)";
2、 导入数据
该步骤会将文件“image”导入成一个大对象并生成一个oid,查询lo_test_tab表时则显示oid。
sql<< "insert into lo_test_tab values('beautiful image',:image)",use(lo_import(((postgresql_session_backend *)(sql.get_backend()))->conn_,"D://image"));
3、导出数据
该操作将数据库中存储的大对象导出为一个新文件。
Oid oid; sql << "select img from lo_test_tab where name = 'beautiful image'",into(oid); lo_export(((postgresql_session_backend *)(sql.get_backend()))->conn_, oid, "D://image-bak");
字符类型
Vastbase G100中TEXT类型与VARCHAR类型都是可变长的字符类型,区别在于VARCHAR类型通过VARCHAR(n)中的n来限制最大长度,而TEXT类型没有。TEXT类型与VARCHAR类型几乎没有性能差别,TEXT类型最多可存储1G数据 。
使用TEXT类型存储数据时,可用以下方式来进行读写。
1、 创建表
sql<<"create table images (id int, msg text)";
2、插入数据
string text = "the text data";
sql<<"insert into images values(1, :text)",use(text);
3、读取数据
string msg;
sql<<"select msg from images where id = 1",into(msg);
cout << msg << endl;