相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 285.1 kb
PDF (A4)- 286.0 kb


MySQL连接器/ c++ 1.1开发者指南/连接器/ c++使用笔记

第九章连接器/ c++使用笔记

连接器/ c++兼容JDBC 4.0 API。看到JDBC概述在JDBC 4.0的信息。也请检查例子下载包的目录。

  • 连接器/ c++sql:数据类型类定义了以下JDBC标准数据类型:未知的,,非常小的整数,短整型,MEDIUMINT,整数,长整型数字,真正的,,小数,数字,字符,二进制,VARCHAR,VARBINARY,用LONGVARCHAR,LONGVARBINARY,时间戳,日期,时间,几何,枚举,,SQLNULL

    连接器/ c++不支持JDBC标准数据类型如下:数组,,CLOB,截然不同的,浮动,其他,裁判,结构体

  • DatabaseMetaData: supportsBatchUpdates ()返回真正的因为MySQL支持批量更新。然而,连接器/ c++ API提供了没有批量更新的API调用。

  • 两个non-JDBC方法允许您获取并设置无符号整数:getUInt64 ()getUInt ()。这些都是用于结果集Prepared_Statement:

    • 结果集::getUInt64 ()

    • 结果集::getUInt ()

    • Prepared_Statement: setUInt64 ()

    • Prepared_Statement: setUInt ()

  • DatabaseMetaData: getColumns ()方法23列的结果集,而不是22列定义的JDBC。前22列JDBC所描述的文档,但是列23个新:10bet官方网站

    23。IS_AUTOINCREMENT:一个字符串是的如果一个自动递增列列,没有否则。

  • 连接器/ c++可以返回不同的元数据相同的列,这取决于您调用的方法。

    假设您有一个专栏,它接受一个字符集和校对规范和您指定一个二进制排序,如:

    VARCHAR(20)字符集utf8核对utf8_bin

    服务器设置二进制本专栏的国旗在结果集中的元数据。的ResultSetMetaData: getColumnTypeName ()方法使用元数据和报告,由于二进制国旗,这列类型名称二进制在这里,说明:

    mysql > CREATE TABLE varbin(一个VARCHAR(20)字符集utf8核对utf8_bin);查询好,0行影响(0.00秒)从varbin mysql > select *;字段1:a目录:“def”数据库:“测试”表:“varbin”Org_table:“varbin”类型:VAR_STRING排序:latin1_swedish_ci(8)长度:20 Max_length: 0小数:0标志:二进制0行组(0.00秒)mysql >从INFORMATION_SCHEMA选择*。列在TABLE_NAME = ' varbin ' \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行* * * * * * * * * * * * * * * * * * * * * * * * * * * TABLE_CATALOG:零TABLE_SCHEMA:测试TABLE_NAME: varbin COLUMN_NAME: ORDINAL_POSITION: 1 COLUMN_DEFAULT:零IS_NULLABLE:是的DATA_TYPE: varchar CHARACTER_MAXIMUM_LENGTH: 20 CHARACTER_OCTET_LENGTH: 60 NUMERIC_PRECISION:零NUMERIC_SCALE:零CHARACTER_SET_NAME: use utf8 COLLATION_NAME: utf8_bin COLUMN_TYPE: varchar (20) COLUMN_KEY:额外:特权:选择、插入、更新、引用COLUMN_COMMENT: 1行组(0.01秒)

    然而,INFORMATION_SCHEMA不给任何提示的表将包含元数据二进制国旗。DatabaseMetaData: getColumns ()使用INFORMATION_SCHEMA并将报告类型名称VARCHAR为同一列。它还返回一个不同类型的代码。

  • 当插入或更新文本列,连接器/ c++开发人员建议不使用setString ()。相反,使用专用的setBlob ()API函数。

    的使用setString ()会导致包太大错误消息。如果发生错误字符串的长度传递到连接器使用setString ()超过max_allowed_packet(减去几个字节保留控制协议的目的)。这种情况并不是处理连接器/ c++,因为它可能会导致安全问题,如超大内存分配请求由于恶意地长字符串。

    如果setBlob ()使用,不存在这个问题,因为setBlob ()采用基于流方法std:: istream。在发送的数据流到MySQL服务器,连接器/ c++流分成块适合使用当前的服务器max_allowed_packet设置。

    谨慎

    当使用setString (),这是不可能的max_allowed_packet为字符串值足够大之前通过连接器/ c++。在一个会话配置选项不能被改变。

    这种差异从JDBC规范确保连接器/ c++不容易记忆的洪水袭击。

  • 一般来说,连接器/ c++使用MySQL 5.0,但它不是完全支持。一些方法不得当连接到MySQL 5.0可用。这是因为信息模式是用于获取所请求的信息。没有计划提高支持5.0,因为当前的MySQL GA版本是5.6。连接器/ c++主要是针对MySQL的GA版本可用的版本。

    以下方法抛出一个sql: MethodNotImplemented除了当你连接到一个MySQL服务器比5.1:早

    • DatabaseMetaData: getCrossReference ()

    • DatabaseMetaData: getExportedKeys ()

  • 连接器/ c++包括连接:getClientOption ()方法,不包括在JDBC API规范。原型是:

    空白getClientOption (const std:: string & optionName void *用optionValue)

    该方法可用于检查连接属性设置的值时建立一个数据库连接。通过返回的值用optionValue参数传递给方法的类型void *

    目前,getClientOption ()获取支持用optionValue下列选项:

    • metadataUseInfoSchema

    • defaultStatementResultType

    • defaultPreparedStatementResultType

    metadataUseInfoSchema连接选项控制是否使用Information_Schemata对返回的元数据显示声明:

    • metadataUseInfoSchema,解释用optionValue参数为一个布尔返回。

    • defaultStatementResultTypedefaultPreparedStatementResultType,解释用optionValue参数为整数时返回。

    连接可以将属性设置当通过连接属性映射建立连接时,或使用无效的连接::setClientOption (const std:: string & optionName const void *用optionValue)在哪里optionName分配的值metadataUseInfoSchema

    一些例子:

    bool isInfoSchemaUsed;康涅狄格州- > getClientOption (“metadataUseInfoSchema”(void *) &isInfoSchemaUsed);int defaultStmtResType;int defaultPStmtResType;康涅狄格州- > getClientOption (“defaultStatementResultType”(void *) &defaultStmtResType);康涅狄格州- > getClientOption (“defaultPreparedStatementResultType”(void *) &defaultPStmtResType);
  • 获取和设置MySQL会话变量,连接器/ c++支持以下MySQL_Connection方法,没有发现在JDBC API标准:

    std:: string MySQL_Connection: getSessionVariable (const std:: string & varname)
    空白MySQL_Connection:: setSessionVariable (const std:: string & varname const std:: string &值)

    getSessionVariable ()相当于执行以下和获取第一个返回值:

    显示会话变量像‘var_name

    您可以使用%_SQL模式字符var_name

    setSessionVariable ()相当于执行:

    设置会话var_name=价值
  • 获取一个列的值有时可以返回不同的值取决于调用语句或准备语句。这是因为使用的协议与服务器通信的不同取决于声明或事先准备好的声明中使用。

    为了说明这一点,考虑一下这种情况:一列被定义为类型长整型数字。最消极的长整型数字然后插入到列值。如果一个声明和预备语句创建执行getUInt64 ()调用,那么结果将是不同的。该语句返回最大的积极价值长整型数字。准备语句返回0。

    结果的差异语句使用一个文本协议,和准备好的语句使用二进制协议。使用二进制协议在这种情况下,从服务器返回一个二进制值,可以解释为一个int64。在前面的场景中,一个非常大的负值获取getUInt64 (),获取无符号整数。因为大负值不能明智地转化为一个无符号值,则返回0。

    在声明的情况下,它使用文本协议,从服务器返回值作为字符串,然后根据需要转换。当一个从服务器返回字符串值是在前面的场景中,大负值必须转换运行时库函数strtoul (),这getUInt64 ()调用。的行为strtoul ()依赖于特定的运行时和主机操作系统,所以可以依赖于平台的结果。在的情况下,给定一个大积极价值实际上是返回。

    虽然是非常罕见的,有些情况下,语句和准备好的语句可以返回不同的值出乎意料,但这通常只发生在极端情况下,如一个被提及。

  • JDBC的文档10bet官方网站列出了许多领域DatabaseMetaData类。JDBC似乎也定义特定的值这些字段。然而,连接器/ c++并不为这些字段定义某些值。内部使用枚举和编译器决定了价值分配领域。

    比较值的字段中,使用以下代码,而不是假设的特定属性值:

    / /该是DatabaseMetaData如果一个实例(myvalue = =该- > attributeNoNulls) {…}

    通常括号将从一个结果集列元数据信息。连接器/ c++并不能保证attributeNoNulls是0。它可以是任何值。

  • 存储过程编程时,JDBC提供一个额外的类,可调用语句的额外的抽象层,CallableStatement类。这个类不存在在连接器/ c++,使用的方法声明PreparedStatement类来执行一个存储过程使用调用