日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

BLOB數(shù)據(jù)類型(邀測中)

BLOB(Binary Large Object)即二進制大對象,通常用于存儲較大的二進制文件,例如音頻、視頻、圖像等文件。Lindorm寬表SQL支持BLOB數(shù)據(jù)類型,使用時可以直接將Lindorm寬表中的一個非主鍵列的數(shù)據(jù)類型定義為BLOB類型。本文介紹如何使用Lindorm寬表的BLOB數(shù)據(jù)類型。

適用引擎

BLOB數(shù)據(jù)類型僅適用于寬表引擎。

前提條件

重要

BLOB數(shù)據(jù)類型目前處于邀測階段,如有使用需求,請聯(lián)系Lindorm技術(shù)支持(釘釘號:s0s3eg3)申請使用名額。

注意事項

Lindorm寬表的主鍵列不支持BLOB數(shù)據(jù)類型。

DDL

您可以在創(chuàng)建表或修改表時,指定相關(guān)列的數(shù)據(jù)類型為BLOB。

  • 執(zhí)行以下語句,創(chuàng)建表tb并指定p1為主鍵列且類型為INT,c1列和c2列為非主鍵列,且類型分別為VARCHAR和BLOB。

    CREATE TABLE tb (p1 INT, c1 VARCHAR, c2 BLOB, PRIMARY KEY(p1));
    說明
    • 如果表名中需要包含下劃線(_)等特殊字符,請在建表時指定BLOB_BUCKET_NAME屬性。BLOB_BUCKET_NAME屬性的詳細介紹,請參見表屬性(table_options)。

    • 建表語法,請參見CREATE TABLE

  • 執(zhí)行以下語句,在表中新增c3列并指定c3列為BLOB類型。

    ALTER TABLE tb ADD COLUMN c3 BLOB;
    重要
    • 增加列的語法,請參見ALTER TABLE

    • 寬表引擎2.6.4之前的版本,如果在建表時未設(shè)置BLOB列,那么通過ALTER TABLE ADD COLUMN添加的BLOB列將出現(xiàn)數(shù)據(jù)讀寫問題。建議您將寬表引擎升級至2.6.4及以上版本。如何查看或升級當前版本,請參見寬表引擎版本說明升級小版本。

    • 寬表引擎2.6.4及以上版本,通過ALTER TABLE ADD COLUMN添加BLOB列時,系統(tǒng)默認以數(shù)據(jù)庫名和表名來拼接BLOB_BUCKET_NAME。如果拼接后的BLOB_BUCKET_NAME不滿足BUCKET命名規(guī)則,則該語句將報錯此時您可以顯式自定義一個符合命名規(guī)則的BLOB_BUCKET_NAME,例如ALTER TABLE tb_name SET 'BLOB_BUCKET_NAME'='my-bucket-name';。BUCKET命名規(guī)則請參見表屬性(table_options)

    • 如果原表已設(shè)置BLOB_BUCKET_NAME屬性,請不要修改。您可以在集群管理系統(tǒng)的概覽頁面,單擊目標數(shù)據(jù)庫下的目標表名。在當前詳情表格區(qū)域,單擊查看表屬性,查看原表是否設(shè)置了BLOB_BUCKET_NAME屬性。如何進入集群管理系統(tǒng),請參見登錄集群管理系統(tǒng)

DML

說明

目前BLOB數(shù)據(jù)類型的DML操作僅支持Lindorm JDBC Driver方式。如何通過Lindorm JDBC Driver連接寬表引擎,請參見使用Java語言JDBC接口的應用開發(fā)

數(shù)據(jù)寫入

BLOB列可通過PreparedStatement#setBlob(int parameterIndex, InputStream inputStream, long length)方式綁定參數(shù)并寫入數(shù)據(jù)。inputStream參數(shù)表示傳入InputStream對象,length為InputStream對象中數(shù)據(jù)的大小。示例代碼如下:

String upsert = "upsert into " + tableName + "(p1,c1,c2) values(?, ?, ?)";
int len = 20*1024*1024 + 3;
byte[] v = new byte[len];
try (PreparedStatement pStmt = conn.prepareStatement(upsert)) {
pStmt.setInt(1, 1);
pStmt.setString(2, "123");
pStmt.setBlob(3, new ByteArrayInputStream(v), len); //流寫B(tài)LOB數(shù)據(jù)
pStmt.executeUpdate();
}

數(shù)據(jù)讀取

Lindorm支持以下兩種方式讀取BLOB列的數(shù)據(jù):

  • 方式一:一次性讀取一行數(shù)據(jù)中整個BLOB列的全部內(nèi)容,并保存至一個字節(jié)數(shù)組中。

    //直接讀取整個BLOB列的完整內(nèi)容
    ResultSet resultSet = stmt.executeQuery("select * from " + tableName + " where p1 = 1" );
    byte[] readBytes2 = resultSet.getBytes(3);
  • 方式二:獲取BLOB列中的InputStream對象進行讀取。

    說明
    • 僅Lindorm JDBC Driver為2.1.3及以上版本時,可以通過該方式讀取數(shù)據(jù)。

    • 如果需要在后續(xù)業(yè)務邏輯中進行流式處理,請選擇該方式。

    //獲取BLOB列對應的InputStream對象進行讀取
    ResultSet resultSet = stmt.executeQuery("select * from " + tableName + " where p1 = 1" );
    Blob blob = resultSet.getBlob(3);
    InputStream inputStream = blob.getBinaryStream();
    ....//應用從InputStream對象中獲取數(shù)據(jù),進行流式處理
    blob.free();    //使用完成后需要釋放

函數(shù)說明

目前BLOB數(shù)據(jù)類型支持以下函數(shù),可用于SQL操作。

  • blob_sizeof:獲取一行數(shù)據(jù)中指定BLOB列的大小。輸入值類型為BLOB,返回值類型為INTEGER。

    示例如下:

    使用blob_sizeof函數(shù)獲取數(shù)據(jù)類型為BLOB,名為c2的列的大小。

    SELECT blob_sizeof(c2) FROM testBlob WHERE p1 = 1;
  • blob_url:獲取一行數(shù)據(jù)中指定BLOB列的下載地址。輸入值類型為BLOB,返回值類型為VARCHAR。

    示例如下:

    使用blob_url函數(shù)獲取數(shù)據(jù)類型為BLOB,名為c2的列的下載地址。

    SELECT blob_url(c2) FROM testBlob WHERE p1 = 1;
    說明

    返回結(jié)果為HTTP地址,可以通過這個地址下載BLOB列。