Skip to content

JDBC驱动

Ignite 带有 JDBC 驱动,可以在 JDBC 端直接使用标准 SQL 语句(如SELECTINSERTUPDATEDELETE)处理分布式数据,驱动的类名是org.apache.ignite.jdbc.IgniteJdbcDriver

当前 JDBC 驱动不支持如下的功能:

  • 多个端点;
  • JDBC 连接池。

1.配置

JDBC 驱动使用客户端连接器来接入集群,有关配置客户端连接器的详细信息,请参见客户端连接器配置

JDBC 驱动需要从 Maven 引入:

xml
<dependency>
    <groupId>org.apache.ignite</groupId>
    <artifactId>ignite-jdbc</artifactId>
    <version>3.1.0</version>
</dependency>

下面是打开监听在127.0.0.1 IP 地址的集群节点的 JDBC 连接的方法:

java
Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1:10800");

驱动会接入其中一个集群节点,并将所有查询转发到该节点以进行最终执行,该节点处理查询分布和结果的聚合,然后将结果返回客户端程序。

JDBC 连接字符串可以在 ? 分隔符后面跟一个可选的键-值对列表作为参数,键和值用=符号分隔,多个属性用&;分隔,分隔符不能混用。

jdbc:ignite:thin://host[:port][,host[:port][/schema][[?parameter1=value1][&parameter2=value2],...]]
jdbc:ignite:thin://host[:port][,host[:port][/schema][[?parameter1=value1][;parameter2=value2],...]]
  • host:必填项,要接入的集群节点的主机地址;
  • port:用于打开连接的端口,如果未指定,则默认值为 10800
  • schema:要访问的模式名,默认值为 PUBLIC。该名称应与 SQL ANSI-99 标准相对应,不带引号的标识符不区分大小写,带引号的区分大小写。使用分号格式时,模式也可以定义为名为 schema 的参数;
  • parameter:可选参数,可用的参数如下:
    • connectionTimeZone:客户端连接时区 ID,客户端可以使用此参数来更改服务端会话的时区,影响未显式指定时区的查询中日期的解释。如果未指定,将使用客户端的系统时区默认值;
    • queryTimeout:驱动将等待Statement对象执行的秒数,0 表示没有限制。默认值:0
    • connectionTimeout:JDBC 客户端将等待服务端响应的毫秒数,0 表示没有限制,默认值:0
    • reconnectThrottlingPeriod:重新连接限流间隔,以毫秒为单位,0 表示没有限制,默认值:30_000
    • reconnectThrottlingRetries:重新连接限流重试,0 表示没有限制,默认值:3
    • username:用于对集群进行基本身份验证的用户名;
    • password:用于对集群进行基本身份验证的用户密码;
    • sslEnabled:是否启用 SSL,可能的值:truefalse,默认值:false
      • trustStorePath:客户端信任库的路径;
      • trustStorePassword:信任库密码;
      • keyStorePath:客户端密钥库的路径;
      • keyStorePassword:密钥库密码;
      • clientAuth:SSL 客户端身份验证,可能的值:NONEOPTIONALREQUIRE
      • ciphers:逗号分隔的 SSL 密码列表。

1.1.参数优先级

如果使用不同的方式传递相同的参数,JDBC 驱动将按以下方式确定优先级:

  • Connection对象中传递的 API 参数;
  • 连接字符串中参数的最后一个实例;
  • 在连接期间传递 Properties 对象。

2.执行事务

使用 JDBC 驱动,可以执行事务的提交和回滚,具体请参见执行事务章节的内容。

以下是提交事务的方法:

java
// Open the JDBC connection.
Connection conn = DriverManager.getConnection("jdbc:ignite:thin://127.0.0.1:10800");

// Commit a transaction
conn.commit();

还可以通过使用setAutoCommit()方法自动提交事务。

下面是回滚事务的方法:

java
conn.rollback();

3.不支持的强制性 JDBC 功能

当前不支持以下强制性 JDBC 功能(按字母顺序排序):

  • java.sql.Connection#clearWarnings
  • java.sql.Connection#getWarnings
  • java.sql.Connection#prepareCall
  • java.sql.PreparedStatement#getParameterMetaData
  • java.sql.PreparedStatement#setAsciiStream
  • java.sql.PreparedStatement#setBinaryStream
  • java.sql.PreparedStatement#setCharacterStream
  • java.sql.ResultSet#clearWarnings
  • java.sql.ResultSet#getAsciiStream
  • java.sql.ResultSet#getBinaryStream
  • java.sql.ResultSet#getCharacterStream
  • java.sql.ResultSet#getWarnings
  • java.sql.ResultSet#setFetchDirection
  • java.sql.Statement#clearWarnings
  • java.sql.Statement#getWarnings
  • java.sql.Statement#setEscapeProcessing
  • java.sql.Statement#setFetchDirection
  • java.sql.Statement#setMaxFieldSize

4.不支持的可选 JDBC 功能

当前不支持以下可选的 JDBC 功能(按字母顺序排序):

  • java.sql.Connection#createArrayOf
  • java.sql.Connection#createBlob
  • java.sql.Connection#createClob
  • java.sql.Connection#createNClob
  • java.sql.Connection#createSQLXML
  • java.sql.Connection#createStruct
  • java.sql.Connection#getTypeMap
  • java.sql.Connection#releaseSavepoint
  • java.sql.Connection#setSavepoint
  • java.sql.Connection#setTypeMap
  • java.sql.Driver#getParentLogger
  • java.sql.PreparedStatement#getMetaData
  • java.sql.PreparedStatement#setArray
  • java.sql.PreparedStatement#setBlob
  • java.sql.PreparedStatement#setClob
  • java.sql.PreparedStatement#setNCharacterStream
  • java.sql.PreparedStatement#setNClob
  • java.sql.PreparedStatement#setRef
  • java.sql.PreparedStatement#setRowId
  • java.sql.PreparedStatement#setSQLXML
  • java.sql.PreparedStatement#setUnicodeStream
  • java.sql.PreparedStatement#setURL
  • java.sql.ResultSet#cancelRowUpdates
  • java.sql.ResultSet#deleteRow
  • java.sql.ResultSet#getArray
  • java.sql.ResultSet#getBlob
  • java.sql.ResultSet#getClob
  • java.sql.ResultSet#getNCharacterStream
  • java.sql.ResultSet#getNClob
  • java.sql.ResultSet#getRef
  • java.sql.ResultSet#getRowId
  • java.sql.ResultSet#getSQLXML
  • java.sql.ResultSet#getUnicodeStream
  • java.sql.ResultSet#insertRow
  • java.sql.ResultSet#moveToInsertRow
  • java.sql.ResultSet#refreshRow
  • java.sql.ResultSet#updateArray
  • java.sql.ResultSet#updateAsciiStream
  • java.sql.ResultSet#updateBigDecimal
  • java.sql.ResultSet#updateBinaryStream
  • java.sql.ResultSet#updateBlob
  • java.sql.ResultSet#updateBoolean
  • java.sql.ResultSet#updateByte
  • java.sql.ResultSet#updateBytes
  • java.sql.ResultSet#updateCharacterStream
  • java.sql.ResultSet#updateClob
  • java.sql.ResultSet#updateDate
  • java.sql.ResultSet#updateDouble
  • java.sql.ResultSet#updateFloat
  • java.sql.ResultSet#updateInt
  • java.sql.ResultSet#updateLong
  • java.sql.ResultSet#updateNCharacterStream
  • java.sql.ResultSet#updateNClob
  • java.sql.ResultSet#updateNString
  • java.sql.ResultSet#updateNull
  • java.sql.ResultSet#updateObject
  • java.sql.ResultSet#updateRef
  • java.sql.ResultSet#updateRow
  • java.sql.ResultSet#updateRowId
  • java.sql.ResultSet#updateShort
  • java.sql.ResultSet#updateSQLXML
  • java.sql.ResultSet#updateString
  • java.sql.ResultSet#updateTime
  • java.sql.ResultSet#updateTimestamp
  • java.sql.Statement#getGeneratedKeys
  • java.sql.Statement#setCursorName
  • java.sql.Statement#setPoolable

5.支持有限的 JDBC 功能

以下 JDBC 功能仅在特定场景才支持:

特性支持的场景
java.sql.Connection#prepareStatementautoGeneratedKeys=Statement.NO_GENERATED_KEYS,resultSetType=ResultSet.TYPE_FORWARD_ONLY,resultSetConcurrency=ResultSet.CONCUR_READ_ONLY,空值或空的列索引,空值或空的列名。
java.sql.Connection#rollback没有保存点。
java.sql.Statement#executeautoGeneratedKeys=Statement.NO_GENERATED_KEYS, 空值或空的列索引,空值或空的列名。
java.sql.Statement#executeUpdateautoGeneratedKeys=Statement.NO_GENERATED_KEYS, 空值或空的列索引,空值或空的列名。
java.sql.Statement#getMoreResultscurrent=Statement.CLOSE_CURRENT_RESULT。

18624049226