当前位置: 首页 > 面试题库 >

SQL / JDBC中的内联BLOB / BINARY数据类型

桂鑫鹏
2023-03-14
问题内容

假设我要避免在JDBC中使用绑定变量,而要使用“ ad-hoc”语句运行SQL,例如:

connection.createStatement().executeQuery("SELECT ...");

是否有任何内联BLOB数据类型的约定/
JDBC转义语法?我知道H2具有以下语法:

INSERT INTO lob_table VALUES (X'01FF');

但这不是标准。有什么一般的解决方案吗?注意,我对通用方法感兴趣。我知道这可能会非常低效。


问题答案:

可能没有JDBC转义语法,因此我进行了一些搜索,找到并成功测试了以下内容:

  • SQL Server,Sybase ASE,Sybase SQL Anywhere

    INSERT INTO lob_table VALUES (0x01FF);
    
  • DB2

    -- Use a blob constructor. This is not needed for VARCHAR FOR BIT DATA types
    

    INSERT INTO lob_table VALUES (blob(X‘01FF’));

  • Derby,H2,HSQLDB,Ingres,MySQL,SQLite

    INSERT INTO lob_table VALUES (X'01FF');
    
  • 甲骨文

    -- As mentioned by a_horse_with_no_name, keep in mind the relatively low
    

    – limitation of Oracle’s VARCHAR types to hold only 4000 bytes!
    INSERT INTO lob_table VALUES (hextoraw(‘01FF’));

  • Postgres

    -- There is also hex encoding as of Postgres 9.0
    

    – The explicit cast is important, though
    INSERT INTO lob_table VALUES (E’\001\377’::bytea);

有关H的十六进制编码的更多详细信息,请参见AH的答案。
最短,最简单的解决方案是(至少从PostgreSQL 9.0开始):

insert into lob_table (data) values( E'\\x0102030405FF' )

没有任何强制转换(如果该列已经是bytea一个),并且在开始处仅一个 \x标记。这是“二进制数据类型”部分中记录的“十六进制格式” 。

关于X‘01FF’语法:根据字符串常量文档,PostgreSQL确实支持它-用于位字符串。看来,从位到字节转换没有标准转换。

  • SQL标准

    -- SQL actually defines binary literals as such
    

    – (as implemented by DB2, Derby, H2, HSQLDB, Ingres, MySQL, SQLite):
    ::=
    X [ … ]
    [ { [ … ] [ … ] }… ]

    ::=
    git> | A | B | C | D | E | F | a | b | c | d | e | f



 类似资料:
  • 本文向大家介绍详解jdbc实现对CLOB和BLOB数据类型的操作,包括了详解jdbc实现对CLOB和BLOB数据类型的操作的使用技巧和注意事项,需要的朋友参考一下 详解jdbc实现对CLOB和BLOB数据类型的操作 1、 读取操作 CLOB  BLOB 2、写入操作 CLOB BLOB 3、读写CLOB/BLOB数据到文件 TNS: Table: 测试代码: 注:如果是具体的字符串写入CLOB字段

  • 主要内容:日期和时间数据类型,处理NULL值JDBC驱动程序将Java数据类型转换为适当的JDBC类型,然后将其发送到数据库。 它为大多数数据类型提供并使用默认映射。 例如,Java 类型会被转换为SQL 。 创建默认映射以提供到驱动程序时保持一致性。 下表总结了当调用或对象或方法的方法时,将Java数据类型转换为的默认JDBC数据类型。 SQL类型 JDBC/Java类型 setXXX updateXXX VARCHAR java.lan

  • SQL数据类型 - SQL数据类型用于定义列可以包含的值。 每列都需要在数据库表中具有名称和数据类型。 SQL的数据类型: 1. 二进制数据类型 下面给出了三种类型的二进制数据类型: 数据类型 描述 它的最大长度为字节,包含固定长度的二进制数据。 它的最大长度为字节,包含可变长度的二进制数据。 它的最大长度为字节,包含可变长度的二进制数据。 2. 近似数值数据类型: 子类型如下: 类型 开始 结束

  • 主要内容:MySQL 数据类型数据类型用来指明存储在表中的数据的性质。例如,在表的某一列中,如果我们想存储字符串,那么就必须将该字段声明为字符串类型。 在 SQL 中,每个字段、变量和表达式都有特定的数据类型,您可以在创建表时指明字段的类型,也可以根据需要随时修改字段的类型。 大部分数据库都支持以下 4 种类别的基本数据类型: 字符串类型 数值类型(整数+小数) 日期时间类型 二进制类型 本教程以 MySQL 8.0 为例讲解

  • SQL 数据类型 Microsoft Jet 数据库引擎 SQL 数据类型 由13个基本数据类型组成,它们是由 Microsoft Jet 数据库引擎和几个验证过的有效同义字定义的。 下面的表格列出了主要数据类型。这些同义字在Microsoft Jet数据库引擎 SQL 保留字中被识别。 数据类型 存储大小 说明 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中。不需数据

  • > 尝试的代码: 导入java.sql。{Connection,DriverManager,ResultSet} DriverManager.RegisterDriver(新建com.microsoft.sqlserver.jdbc.sqlserverdriver()); class.forName(“com.microsoft.sqlserver.jdbc.sqlserverdriver”) v