JDBC驱动
Ignite 带有 JDBC 驱动,可以在 JDBC 端直接使用标准 SQL 语句(如SELECT、INSERT、UPDATE或DELETE)处理分布式数据,驱动的类名是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][¶meter2=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,可能的值:true、false,默认值:false:trustStorePath:客户端信任库的路径;trustStorePassword:信任库密码;keyStorePath:客户端密钥库的路径;keyStorePassword:密钥库密码;clientAuth:SSL 客户端身份验证,可能的值:NONE、OPTIONAL、REQUIRE;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#clearWarningsjava.sql.Connection#getWarningsjava.sql.Connection#prepareCalljava.sql.PreparedStatement#getParameterMetaDatajava.sql.PreparedStatement#setAsciiStreamjava.sql.PreparedStatement#setBinaryStreamjava.sql.PreparedStatement#setCharacterStreamjava.sql.ResultSet#clearWarningsjava.sql.ResultSet#getAsciiStreamjava.sql.ResultSet#getBinaryStreamjava.sql.ResultSet#getCharacterStreamjava.sql.ResultSet#getWarningsjava.sql.ResultSet#setFetchDirectionjava.sql.Statement#clearWarningsjava.sql.Statement#getWarningsjava.sql.Statement#setEscapeProcessingjava.sql.Statement#setFetchDirectionjava.sql.Statement#setMaxFieldSize
4.不支持的可选 JDBC 功能
当前不支持以下可选的 JDBC 功能(按字母顺序排序):
java.sql.Connection#createArrayOfjava.sql.Connection#createBlobjava.sql.Connection#createClobjava.sql.Connection#createNClobjava.sql.Connection#createSQLXMLjava.sql.Connection#createStructjava.sql.Connection#getTypeMapjava.sql.Connection#releaseSavepointjava.sql.Connection#setSavepointjava.sql.Connection#setTypeMapjava.sql.Driver#getParentLoggerjava.sql.PreparedStatement#getMetaDatajava.sql.PreparedStatement#setArrayjava.sql.PreparedStatement#setBlobjava.sql.PreparedStatement#setClobjava.sql.PreparedStatement#setNCharacterStreamjava.sql.PreparedStatement#setNClobjava.sql.PreparedStatement#setRefjava.sql.PreparedStatement#setRowIdjava.sql.PreparedStatement#setSQLXMLjava.sql.PreparedStatement#setUnicodeStreamjava.sql.PreparedStatement#setURLjava.sql.ResultSet#cancelRowUpdatesjava.sql.ResultSet#deleteRowjava.sql.ResultSet#getArrayjava.sql.ResultSet#getBlobjava.sql.ResultSet#getClobjava.sql.ResultSet#getNCharacterStreamjava.sql.ResultSet#getNClobjava.sql.ResultSet#getRefjava.sql.ResultSet#getRowIdjava.sql.ResultSet#getSQLXMLjava.sql.ResultSet#getUnicodeStreamjava.sql.ResultSet#insertRowjava.sql.ResultSet#moveToInsertRowjava.sql.ResultSet#refreshRowjava.sql.ResultSet#updateArrayjava.sql.ResultSet#updateAsciiStreamjava.sql.ResultSet#updateBigDecimaljava.sql.ResultSet#updateBinaryStreamjava.sql.ResultSet#updateBlobjava.sql.ResultSet#updateBooleanjava.sql.ResultSet#updateBytejava.sql.ResultSet#updateBytesjava.sql.ResultSet#updateCharacterStreamjava.sql.ResultSet#updateClobjava.sql.ResultSet#updateDatejava.sql.ResultSet#updateDoublejava.sql.ResultSet#updateFloatjava.sql.ResultSet#updateIntjava.sql.ResultSet#updateLongjava.sql.ResultSet#updateNCharacterStreamjava.sql.ResultSet#updateNClobjava.sql.ResultSet#updateNStringjava.sql.ResultSet#updateNulljava.sql.ResultSet#updateObjectjava.sql.ResultSet#updateRefjava.sql.ResultSet#updateRowjava.sql.ResultSet#updateRowIdjava.sql.ResultSet#updateShortjava.sql.ResultSet#updateSQLXMLjava.sql.ResultSet#updateStringjava.sql.ResultSet#updateTimejava.sql.ResultSet#updateTimestampjava.sql.Statement#getGeneratedKeysjava.sql.Statement#setCursorNamejava.sql.Statement#setPoolable
5.支持有限的 JDBC 功能
以下 JDBC 功能仅在特定场景才支持:
| 特性 | 支持的场景 |
|---|---|
java.sql.Connection#prepareStatement | autoGeneratedKeys=Statement.NO_GENERATED_KEYS,resultSetType=ResultSet.TYPE_FORWARD_ONLY,resultSetConcurrency=ResultSet.CONCUR_READ_ONLY,空值或空的列索引,空值或空的列名。 |
java.sql.Connection#rollback | 没有保存点。 |
java.sql.Statement#execute | autoGeneratedKeys=Statement.NO_GENERATED_KEYS, 空值或空的列索引,空值或空的列名。 |
java.sql.Statement#executeUpdate | autoGeneratedKeys=Statement.NO_GENERATED_KEYS, 空值或空的列索引,空值或空的列名。 |
java.sql.Statement#getMoreResults | current=Statement.CLOSE_CURRENT_RESULT。 |
18624049226
