TDengine Java Connector
taos-jdbcdriver
是 TDengine 的官方 Java 语言连接器,Java 开发人员可以通过它开发存取 TDengine 数据库的应用软件。taos-jdbcdriver
实现了 JDBC driver 标准的接口.
TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致,但 TDengine 与关系对象型数据库的使用场景和技术特征存在差异,所以taos-jdbcdriver
与传统的 JDBC driver 也存在一定差异。在使用时需 要注意以下几点:
- TDengine 目前不支持针对单条数据记录的删除操作。
- 目前不支持事务操作。
JDBC 和 JRE 版本兼容性
- JDBC: 支持 JDBC 4.2 及以上版本。
- JRE: 支持 JRE 8 及以上版本。
支持的平台
- 原生连接支持的平台和 TDengine 客户端驱动支持的平台一致。
- WebSocket/REST 连接支持所有能运行 Java 的平台。
版本历史
taos-jdbcdriver 版本 | 主要变化 | TDengine 版本 |
---|---|---|
3.5.3 | 在 WebSocket 连接上支持无符号数据类型 | - |
3.5.2 | 解决了 WebSocket 查询结果集释放 bug | - |
3.5.1 | 解决了数据订阅获取时间戳对象类型问题 | - |
3.5.0 | 1. 优化了 WebSocket 连接参数绑定性能,支持参数绑定查询使用二进制数据 2. 优化了 WebSocket 连接在小查询上的性能 3. WebSocket 连接上支持设置时区和应用信息 | 3.3.5.0 及更高版本 |
3.4.0 | 1. 使用 jackson 库替换 fastjson 库 2. WebSocket 采用独立协议标识 3. 优化后台拉取线程使用,避免用户误用导致超时 | - |
3.3.4 | 解决了 getInt 在数据类型为 float 报错 | - |
3.3.3 | 解决了 WebSocket statement 关闭导致的内存泄漏 | - |
3.3.2 | 1. 优化 WebSocket 连接下的参数绑定性能 2. 优化了对 mybatis 的支持 | - |
3.3.0 | 1. 优化 WebSocket 连接下的数据传输性能 2. 支持跳过 SSL 验证,默认关闭 | 3.3.2.0 及更高版本 |
3.2.11 | 解决了 Native 连接关闭结果集 bug | - |
3.2.10 | 1. REST/WebSocket 连接支持传输中的数据压缩 2. WebSocket 自动重连机制,默认关闭 3. Connection 类提供无模式写入的方法 4. 优化了原生连接的数据拉取性能 5. 修复了一些已知问题 6.元数据获取函数可以返回支持的函数列表 | - |
3.2.9 | 解决了 WebSocket prepareStatement 关闭 bug | - |
3.2.8 | 1. 优化了自动提交 2. 解决了 WebSocket 手动提交 bug 3.优化 WebSocket prepareStatement 使用一个连接 4.元数据支持视图 | - |
3.2.7 | 1. 支持 VARBINARY 和 GEOMETRY 类型 2. 增加 native 连接的时区设置支持 3. 增加 WebSocket 自动重连功能 | 3.2.0.0 及更高版本 |
3.2.5 | 数据订阅增加 committed()、assignment() 方法 | 3.1.0.3 及更高版本 |
3.2.4 | 数据订阅在 WebSocket 连接下增加 enable.auto.commit 参数,以及 unsubscribe 方法 | - |
3.2.3 | 修复 ResultSet 在一些情况数据解析失败 | - |
3.2.2 | 数据订阅支持 seek 功能 | 3.0.5.0 及更高版本 |
3.2.1 | 1. WebSocket 连接支持 schemaless 与 prepareStatement 写入 2. consumer poll 返回结果集为 ConsumerRecord,可通过 value() 获取指定结果集数 据 | 3.0.3.0 及更高版本 |
3.2.0 | 存在连接问题,不推荐使用 | - |
3.1.0 | WebSocket 连接支持订阅功能 | - |
3.0.1 - 3.0.4 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用其他版本 | - |
3.0.0 | 支持 TDengine 3.0 | 3.0.0.0 及更高版本 |
2.0.42 | 修复 WebSocket 连接中 wasNull 接口返回值 | - |
2.0.41 | 修复 REST 连接中用户名和密码转码方式 | - |
2.0.39 - 2.0.40 | 增加 REST 连接/请求 超时设置 | - |
2.0.38 | JDBC REST 连接增加批量拉取功能 | - |
2.0.37 | 增加对 json tag 支持 | - |
2.0.36 | 增加对 schemaless 写入支持 | - |
异常和错误码
在报错后,通过 SQLException 可以获取到错误的信息和错误码:
try (Statement statement = connection.createStatement();
// executeQuery
ResultSet tempResultSet = statement.executeQuery(sql)) {
// print result
printResult(tempResultSet);
} catch (Exception ex) {
// please refer to the JDBC specifications for detailed exceptions info
System.out.printf("Failed to execute statement, %sErrMessage: %s%n",
ex instanceof SQLException ? "ErrCode: " + ((SQLException) ex).getErrorCode() + ", " : "",
ex.getMessage());
// Print stack trace for context in examples. Use logging in production.
ex.printStackTrace();
throw ex;
}
JDBC 连接器可能报错的错误码包括 4 种:
- JDBC driver 本身的报错(错误码在 0x2301 到 0x2350 之间)
- 原生连接方法的报错(错误码在 0x2351 到 0x2360 之间)
- 数据订阅的报错(错误码在 0x2371 到 0x2380 之间)
- TDengine 其他功能模块的报错,请参考 错误码
具体的错误码请参考:
Error Code | Description | Suggested Actions |
---|---|---|
0x2301 | connection already closed | 连接已经关闭,检查连接情况,或重新创建连接去执行相关指令。 |
0x2302 | this operation is NOT supported currently! | 当前使用接口不支持,可以更换其他连接方式。 |
0x2303 | invalid variables | 参数不合法,请检查相应接口规范,调整参数类型及大小。 |
0x2304 | statement is closed | statement 已经关闭,请检查 statement 是否关闭后再次使用,或是连接是否正常。 |
0x2305 | resultSet is closed | resultSet 结果集已经释放,请检查 resultSet 是否释放后再次使用。 |
0x2306 | Batch is empty! | prepareStatement 添加参数后再执行 executeBatch。 |
0x2307 | Can not issue data manipulation statements with executeQuery() | 更新操作应该使用 executeUpdate(),而不是 executeQuery()。 |
0x2308 | Can not issue SELECT via executeUpdate() | 查询操作应该使用 executeQuery(),而不是 executeUpdate()。 |
0x230d | parameter index out of range | 参数越界,请检查参数的合理范围。 |
0x230e | connection already closed | 连接已经关闭,请检查 Connection 是否关闭后再次使用,或是连接是否正常。 |
0x230f | unknown sql type in tdengine | 请检查 TDengine 支持的 Data Type 类型。 |
0x2310 | can't register JDBC-JNI driver | 不能注册 JNI 驱动,请检查 url 是否填写正确。 |
0x2312 | url is not set | 请检查 REST 连接 url 是否填写正确。 |
0x2314 | numeric value out of range | 请检查获取结果集中数值类型是否使用了正确的接口。 |
0x2315 | unknown taos type in tdengine | 在 TDengine 数据类型与 JDBC 数据类型转换时,是否指定了正确的 TDengine 数据类型。 |
0x2317 | REST 连接中使用了错误的请求类型。 | |
0x2318 | REST 连接中出现了数据传输异常,请检查网络情况并重试。 | |
0x2319 | user is required | 创建连接时缺少用户名信息 |
0x231a | password is required | 创建连接时缺少密码信息 |
0x231c | httpEntity is null, sql: | REST 连接中执行出现异常 |
0x231d | can't create connection with server within | 通过增加参数 httpConnectTimeout 增加连接耗时,或是请检查与 taosAdapter 之间的连接情况。 |
0x231e | failed to complete the task within the specified time | 通过增加参数 messageWaitTimeout 增加执行耗时,或是请检查与 taosAdapter 之间的连接情况。 |
0x2350 | unknown error | 未知异常,请在 github 反馈给开发人员。 |
0x2352 | Unsupported encoding | 本地连接下指定了不支持的字符编码集 |
0x2353 | internal error of database, please see taoslog for more details | 本地连接执行 prepareStatement 时出现错误,请检查 taos log 进行问题定位。 |
0x2354 | JNI connection is NULL | 本地连接执行命令时,Connection 已经关闭。请检查与 TDengine 的连接情况。 |
0x2355 | JNI result set is NULL | 本地连接获取结果集,结果集异常,请检查连接情况,并重试。 |
0x2356 | invalid num of fields | 本地连接获取结果集的 meta 信息不匹配。 |
0x2357 | empty sql string | 填写正确的 SQL 进行执行。 |
0x2359 | JNI alloc memory failed, please see taoslog for more details | 本地连接分配内存错误,请检查 taos log 进行问题定位。 |
0x2371 | consumer properties must not be null! | 创建订阅时参数为空,请填写正确的参数。 |
0x2372 | configs contain empty key, failed to set consumer property | 参数 key 中包含空值,请填写正确的参数。 |
0x2373 | failed to set consumer property, | 参数 value 中包含空值,请填写正确的参数。 |
0x2375 | topic reference has been destroyed | 创建数据订阅过程中,topic 引用被释放。请检查与 TDengine 的连接情况。 |
0x2376 | failed to set consumer topic, topic name is empty | 创建数据订阅过程中,订阅 topic 名称为空。请检查指定的 topic 名称是否填写正确。 |
0x2377 | consumer reference has been destroyed | 订阅数据传输通道已经关闭,请检查与 TDengine 的连接情况。 |
0x2378 | consumer create error | 创建数据订阅失败,请根据错误信息检查 taos log 进行问题定位。 |
0x2379 | seek offset must not be a negative number | seek 接口参数不能为负值,请使用正确的参数 |
0x237a | vGroup not found in result set | VGroup 没有分配给当前 consumer,由于 Rebalance 机制导致 Consumer 与 VGroup 不是绑定的关系 |
数据类型映射
TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对应类型转换如下:
TDengine DataType | JDBCType | 备注 |
---|---|---|
TIMESTAMP | java.sql.Timestamp | |
BOOL | java.lang.Boolean | |
TINYINT | java.lang.Byte | |
TINYINT UNSIGNED | java.lang.Short | 仅在 WebSocket 连接方式支持 |
SMALLINT | java.lang.Short | |
SMALLINT UNSIGNED | java.lang.Integer | 仅在 WebSocket 连接方式支持 |
INT | java.lang.Integer | |
INT UNSIGNED | java.lang.Long | 仅在 WebSocket 连接方式支持 |
BIGINT | java.lang.Long | |
BIGINT UNSIGNED | java.math.BigInteger | 仅在 WebSocket 连接方式支持 |
FLOAT | java.lang.Float | |
DOUBLE | java.lang.Double | |
BINARY | byte array | |
NCHAR | java.lang.String | |
JSON | java.lang.String | 仅在 tag 中支持 |
VARBINARY | byte[] | |
GEOMETRY | byte[] |
注意:由于历史原因,TDengine中的BINARY底层不是真正的二进制数据,已不建议使用。请用VARBINARY类型代替。
GEOMETRY类型是little endian字节序的二进制数据,符合WKB规范。详细信息请参考 数据类型
WKB规范请参考Well-Known Binary (WKB)
对于java连接器,可以使 用jts库来方便的创建GEOMETRY类型对象,序列化后写入TDengine,这里有一个样例Geometry示例
示例程序汇总
示例程序源码位于 TDengine/docs/examples/JDBC
下:
- JDBCDemo:JDBC 示例源程序。
- connectionPools:HikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。
- SpringJdbcTemplate:Spring JdbcTemplate 中使用 taos-jdbcdriver。
- mybatisplus-demo:Springboot + Mybatis 中使用 taos-jdbcdriver。
- springbootdemo: Springboot 中使用 taos-jdbcdriver。
- consumer-demo:Consumer 消费 TDengine 数据示例,可通过参数控制消费速度。
请参考:JDBC example
常见问题
- 使用 Statement 的
addBatch()
和executeBatch()
来执行“批量写入/更新”,为什么没有带来性能上的提升?
原因:TDengine 的 JDBC 实现中,通过 addBatch
方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。
解决方法:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入 方式
- java.lang.UnsatisfiedLinkError: no taos in java.library.path
原因:程序没有找到依赖的本地函数库 taos。
解决方法:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so
即可,macOS 下需要建立软链 ln -s /usr/local/lib/libtaos.dylib /usr/lib/libtaos.dylib
。
- java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform
原因:目前 TDengine 只支持 64 位 JDK。
解决方法:重新安装 64 位 JDK。
- java.lang.NoSuchMethodError: setByteArray
原因:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。
解决方法: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。
- java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar
原因:taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。
解决方法: 更换 taos-jdbcdriver 3.0.2+ 版本。
其它问题请参考 FAQ
API 参考
JDBC 驱动
taos-jdbcdriver 实现了 JDBC 标准的 Driver 接口,提供了 3 个实现类。
- WebSocket 连接使用驱动类
com.taosdata.jdbc.ws.WebSocketDriver
。 - 原生连接使用驱动类
com.taosdata.jdbc.TSDBDriver
。 - REST 连接使用驱动类
com.taosdata.jdbc.rs.RestfulDriver
。
URL 规范
TDengine 的 JDBC URL 规范格式为:
jdbc:[TAOS|TAOS-WS|TAOS-RS]://[host_name]:[port]/[database_name]?[user={user}|&password={password}|&charset={charset}|&cfgdir={config_dir}|&locale={locale}|&timezone={timezone}|&batchfetch={batchfetch}]
原生连接
jdbc:TAOS://taosdemo.com:6030/power?user=root&password=taosdata
,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 power 的连接。这个 URL
中指定用户名(user)为 root,密码(password)为 taosdata。
注意:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)。
对于原生连接 url 中支持的配置参数如下:
- user:登录 TDengine 用户名,默认值 'root'。
- password:用户登录密码,默认值 'taosdata'。
- cfgdir:客户端配置文件目录路径,Linux OS 上默认值
/etc/taos
,Windows OS 上默认值C:/TDengine/cfg
。 - charset:客户端使用的字符集,默认值为系统字符集。
- locale:客户端语言环境,默认值系统当前 locale。
- timezone:客户端使用的时区,默认值为系统当前时区。
- batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:true。开启批量拉取同时获取一批数据在查询数据量较大 时批量拉取可以有效的提升查询性能。
- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false:不再执行失败 SQL 后的任何语句。默认值为:false。
JDBC 原生连接的使用请参见视频教程。
使用 TDengine 客户端驱动配置文件建立连接
当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。 此时在 JDBC url 中不指定 hostname
和 port
。
配置如 jdbc:TAOS://:/power?user=root&password=taosdata
。
在 TDengine 客户端驱动配置文件中指定 firstEp 和 secondEp,jdbc 会使用客户端的配置文件,建立连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp 连接集群。
TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。
注意:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 C://TDengine/cfg/taos.cfg。
WebSocket 连接
使用 JDBC WebSocket 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要:
- driverClass 指定为“com.taosdata.jdbc.ws.WebSocketDriver”;
- jdbcUrl 以“jdbc:TAOS-WS://”开头;
- 使用 6041 作为连接端口。
对于 WebSocket 连接,url 中的配置参数如下:
- user:登录 TDengine 用户名,默认值 'root'。
- password:用户登录密码,默认值 'taosdata'。
- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL 后的任何语句。默认值为:false。
- httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 60000。
- messageWaitTimeout: 消息超时时间, 单位 ms, 默认值为 60000。
- useSSL: 连接中是否使用 SSL。
- timezone:客户端使用的时区,连接上生效,默认值为系统时区。推荐不设置,使用系统时区性能更好。
注意:部分配置项(比如:locale、charset)在 WebSocket 连接中不生效。
REST 连接
使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要:
- driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”;
- jdbcUrl 以“jdbc:TAOS-RS://”开头;
- 使用 6041 作为连接端口。
对于 REST 连接,url 中的配置参数如下:
- user:登录 TDengine 用户名,默认值 'root'。
- password:用户登录密码,默认值 'taosdata'。
- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL 后的任何语句。默认值为:false。
- httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 60000。
- httpSocketTimeout: socket 超时时间,单位 ms,默认值为 60000。
- useSSL: 连接中是否使用 SSL。
- httpPoolSize: REST 并发请求大小,默认 20。
注意:部分配置项(比如:locale、charset 和 timezone)在 REST 连接中不生效。
- 与原生连接方式不同,REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。
- 如果在 url 中指定了 dbname,那么,JDBC REST 连接会默认使用/rest/sql/dbname 作为 restful 请求的 url,在 SQL 中不需要指定 dbname。例如:url 为 jdbc:TAOS-RS://127.0.0.1:6041/power,那么,可以执行 sql:
INSERT INTO d1001 USING meters TAGS(2,'California.SanFrancisco') VALUES (NOW, 10.30000, 219, 0.31000)
;
Properties
除了通过指定的 URL 获取连接,还可以使用 Properties 指定建立连接时的参数。
注意:应用中设置的 client parameter 为进程级别的,即如果要更新 client 的参数,需要重启应用。这是因为 client parameter 是全局参数,仅在应用程序的第一次设置生效。
properties 中的配置参数如下:
-
TSDBDriver.PROPERTY_KEY_USER:登录 TDengine 用户名,默认值 'root'。
-
TSDBDriver.PROPERTY_KEY_PASSWORD:用户登录密码,默认值 'taosdata'。
-
TSDBDriver.PROPERTY_KEY_BATCH_LOAD: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。因历史原因使用 REST 连接时,若设置此参数为 true 会变成 WebSocket 连接。
-
TSDBDriver.PROPERTY_KEY_BATCH_ERROR_IGNORE:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 sq 了。false:不再执行失败 SQL 后的任何语句。默认值为:false。
-
TSDBDriver.PROPERTY_KEY_CONFIG_DIR:仅在使用 JDBC 原生连接时生效。客户端配置文件目录路径,Linux OS 上默认值
/etc/taos
,Windows OS 上默认值C:/TDengine/cfg
。 -
TSDBDriver.PROPERTY_KEY_CHARSET:客户端使用的字符集,默认值为系统字符集。
-
TSDBDriver.PROPERTY_KEY_LOCALE:仅在使用 JDBC 原生连接时生效。 客户端语言环境,默认值系统当前 locale。
-
TSDBDriver.PROPERTY_KEY_TIME_ZONE:
- 原生连接:客户端使用的时区,默认值为系统当前时区,全局生效。因为历史的原因,我们只支持POSIX标准的部分规范,如UTC-8(代表中国上上海), GMT-8,Asia/Shanghai 这几种形式。
- WebSocket 连接:客户端使用的时区,连接上生效,默认值为系统时区。仅支持 IANA 时区,即 Asia/Shanghai 这种形式。推荐不设置,使用系统时区性能更好。
-
TSDBDriver.HTTP_CONNECT_TIMEOUT: 连接超时时间,单位 ms, 默认值为 60000。仅在 REST 连接时生效。
-
TSDBDriver.HTTP_SOCKET_TIMEOUT: socket 超时时间,单位 ms,默认值为 60000。仅在 REST 连接且 batchfetch 设置为 false 时生效。
-
TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 60000。 仅 WebSocket 连接下有效。
-
TSDBDriver.PROPERTY_KEY_USE_SSL: 连接中是否使用 SSL。仅在 WebSocket/REST 连接时生效。
-
TSDBDriver.HTTP_POOL_SIZE: REST 并发请求大小,默认 20。
-
TSDBDriver.PROPERTY_KEY_ENABLE_COMPRESSION: 传输过程是否启用压缩。仅在使用 REST/WebSocket 连接时生效。true: 启用,false: 不启用。默认为 false。
-
TSDBDriver.PROPERTY_KEY_ENABLE_AUTO_RECONNECT: 是否启用自动重连。仅在使用 WebSocket 连接时生效。true: 启用,false: 不启用。默认为 false。
注意:启用自动重连仅对简单执行 SQL 语句以及 无模式写入、数据订阅有效。对于参数绑定无效。自动重连仅对连接建立时通过参数指定数据库有效,对后面的
use db
语句切换数据库无效。 -
TSDBDriver.PROPERTY_KEY_RECONNECT_INTERVAL_MS: 自动重连重试间隔,单位毫秒,默认值 2000。仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
-
TSDBDriver.PROPERTY_KEY_RECONNECT_RETRY_COUNT: 自动重连重试次数,默认值 3,仅在 PROPERTY_KEY_ENABLE_AUTO_RECONNECT 为 true 时生效。
-
TSDBDriver.PROPERTY_KEY_DISABLE_SSL_CERT_VALIDATION: 关闭 SSL 证书验证 。仅在使用 WebSocket 连接时生效。true: 启用,false: 不启用。默认为 false。
-
TSDBDriver.PROPERTY_KEY_APP_NAME: App 名称,可用于
show connections
查询结果显示。仅在使用 WebSocket 连接时生效。默认值为 java。 -
TSDBDriver.PROPERTY_KEY_APP_IP: App IP,可用于
show connections
查询结果显示。仅在使用 WebSocket 连接时生效。默认值为空。
此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数,比如日志级别、SQL 长度等。
配置参数的优先级
通过前面三种方式获取连接,如果配置参数在 url、Properties、客户端配置文件中有重复,则参 数的优先级由高到低
分别如下:
- JDBC URL 参数,如上所述,可以在 JDBC URL 的参数中指定。
- Properties connProps
- 使用原生连接时,TDengine 客户端驱动的配置文件 taos.cfg
例如:在 url 中指定了 password 为 taosdata,在 Properties 中指定了 password 为 taosdemo,那么,JDBC 会使用 url 中的 password 建立连接。
接口说明
-
Connection connect(String url, java.util.Properties info) throws SQLException
- 接口说明:连接 TDengine 数据库。
- 参数说明:
url
:连接地址 url,详见上文 URL 规范。info
:连接属性,详见上文 Properties 章节。
- 返回值:连接对象。
- 异常:连接失败抛出
SQLException
异常。
-
boolean acceptsURL(String url) throws SQLException
- 接口说明:判断驱动是否支持 url。
- 参数说明:
url
:连接地址 url。
- 返回值:
true
:支持,false
:不支持。 - 异常:url 非法抛出
SQLException
异常。
-
DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info) throws SQLException
- 接口说明:获取尝试连接数据库时可能需要的所有属性的详细信息。这些属性信息被封装在 DriverPropertyInfo 对象数组中返回。每个 DriverPropertyInfo 对象包含了一个数据库连接属性的详细信息,比如属性名、属性值、描述等。
- 参数说明:
url
:一个 String 类型的参数,表示数据库的 URL。info
:一个 java.util.Properties 类型的参数,包含了尝试连接时用户可能提供的属性列表。
- 返回值:返回值类型为
DriverPropertyInfo[]
,即DriverPropertyInfo
对象的数组。每个DriverPropertyInfo
对象包含了一个特定的数据库连接属性的详细信息。 - 异常:如果在获取属性信息的过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
-
int getMajorVersion()
- 接口说明:获取 JDBC 驱动程序的主版本号。
-
int getMinorVersion()
- 接口说明:获取 JDBC 驱动程序的次版本号。
数据库元数据
DatabaseMetaData
是 JDBC API 的一部分,它提供了关于数据库的元数据的详细信息,元数据意味着关于数据库数据的数据。通过 DatabaseMetaData
接口,可以查询数据库服务器的详细信息,比如数据库产品名称、版本、已安装的功能、表、视图、存储过程的列表等。这对于了解和适应不同数据库的特性非常有用。
-
String getURL() throws SQLException
- 接口说明:获取用于连接数据库的 URL。
- 返回值:连接数据库的 URL。
- 异常:获取失败将抛出
SQLException
异常。
-
String getUserName() throws SQLException
- 接口说明:获取用于连接获取数据库的用户名。
- 返回值:连接数据库的用户名。
- 异常:获取失败将抛出
SQLException
异常。
-
String getDriverName() throws SQLException
- 接口说明:获取 JDBC 驱动程序的名称。
- 返回值:驱动名称字符串。
- 异常:获取失败将抛出
SQLException
异常。
-
String getDriverVersion() throws SQLException
- 接口说明:获取 JDBC 驱动版本。
- 返回值:驱动版本字符串。
- 异常:获取失败将抛出
SQLException
异常。
-
int getDriverMajorVersion()
- 接口说明:获取 JDBC 驱动主版本号。
-
int getDriverMinorVersion()
- 接口说明:获取 JDBC 驱动次版本号。
-
String getDatabaseProductName() throws SQLException
- 接口说明:获取数据库产品的名称。
-
String getDatabaseProductVersion() throws SQLException
- 接口说明:获取数据库产品的版本号。
-
String getIdentifierQuoteString() throws SQLException
- 接口说明:获取用于引用 SQL 标识符的字符串。
-
String getSQLKeywords() throws SQLException
- 接口说明:获取数据库特有的 SQL 关键字列表。
-
String getNumericFunctions() throws SQLException
- 接口说明:获取数据库支持的数值函数名称列表。
-
String getStringFunctions() throws SQLException
- 接口说明:获取数据库支持的字符串函数名称列表。
-
String getSystemFunctions() throws SQLException
- 接口说明:获取数据库支持的系统函数名称列表。
-
String getTimeDateFunctions() throws SQLException
- 接口说明:获取数据库支持的时间日期函数名称列表。
-
String getCatalogTerm() throws SQLException
- 接口说明:获取数据库中目录的术语。
-
String getCatalogSeparator() throws SQLException
- 接口说明:获取用于分隔目录和表名的分隔符。
-
int getDefaultTransactionIsolation() throws SQLException
- 接口说明:获取数据库的默认事务隔离级别。
-
boolean supportsTransactionIsolationLevel(int level) throws SQLException
- 接口说明:判断数据库是否支持给定的事务隔离级别。
- 参数说明:
level
:事务隔离级别。
- 返回值:
true
:支持,false
:不支持。 - 异常:操作失败抛出
SQLException
异常。
-
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException
- 接口说明:获取数据库中匹配指定模式的表信息。
- 参数说明:
catalog
:目录名称;null
表示不指定目录。schemaPattern
:模式名称的模式;null 表示不指定模式。tableNamePattern
:表名称的模式。types
:表类型列表,返回指定类型的表。
- 返回值:包含表信息的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
ResultSet getCatalogs() throws SQLException
- 接口说明:获取数据库中所有目录的信息。
- 返回值:包含目录信息的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
ResultSet getTableTypes() throws SQLException
- 接口说明:获取数据库支持的表类型。
- 返回值:包含表类型的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException
- 接口说明:获取指定表中匹配指定模式的列信息。
- 参数说明:
catalog
:目录名称;null
表示不指定目录。schemaPattern
:模式名称的模式;null
表示不指定模式。tableNamePattern
:表名称的模式。columnNamePattern
:列名称的模式。
- 返回值:包含列信息的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException
- 接口说明:获取指定表的主键信息。
- 参数说明:
catalog
:目录名称;null
表示不指定目录。schema
:模式名称;null
表示不指定模式。table
:表名称。
- 返回值:包含主键信息的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
Connection getConnection() throws SQLException
- 接口说明:获取数据库连接。
- 返回值:数据库连接
Connection
对象。 - 异常:获取连接失败抛出
SQLException
异常。
-
ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException
- 接口说明:获取指定表的父表信息。
- 参数说明:
catalog
:目录名称;null
表示不指定目录。schemaPattern
:模式名称的模式;null
表示不指定模式。tableNamePattern
:表名称的模式。
- 返回值:包含父表信息的
ResultSet
。 - 异常:操作失败抛出
SQLException
异常。
-
boolean supportsResultSetHoldability(int holdability) throws SQLException
- 接口说明:判断数据库是否支持给定的
ResultSet
持有性。 - 参数说明:
holdability
:ResultSet
的持有性。
- 返回值:
true
:支持,false
:不支持。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:判断数据库是否支持给定的
-
int getSQLStateType() throws SQLException
- 接口说明:获取数据库使用的 SQLSTATE 类型。
- 返回值:SQLSTATE 类型代码。
- 异常:操作失败抛出
SQLException
异常。
支持类接口返回 true
的接口列表,其余返回 false
的接口不再赘述。
接口方法 | 说明 |
---|---|
boolean nullsAreSortedAtStart() | 判断 NULL 值是否被排序在前 |
boolean storesLowerCaseIdentifiers() | 判断数据库是否将标识符存储为小写 |
boolean supportsAlterTableWithAddColumn() | 判断数据库是否支持使用 ALTER TABLE 添加列 |
boolean supportsAlterTableWithDropColumn() | 判断数据库是否支持使用 ALTER TABLE 删除列 |
boolean supportsColumnAliasing() | 判断数据库是否支持列别名 |
boolean supportsGroupBy() | 判断数据库是否支持 GROUP BY 语句 |
boolean isCatalogAtStart() | 判断在数据库中目录名是否出现在完全限定名的开头 |
boolean supportsCatalogsInDataManipulation() | 判断数据库在数据操作语句中是否支持目录名 |
连接功能
JDBC 驱动支持创建连接,返 回支持 JDBC 标准的 Connection
接口的对象,还提供了 AbstractConnection
接口,扩充了一些无模式写入接口。
标准接口
Statement createStatement() throws SQLException
- 接口说明:创建一个
Statement
对象来执行 SQL 语句。Statement
接口详细说明见下文 执行SQL。 - 返回值:创建的
Statement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
PreparedStatement prepareStatement(String sql) throws SQLException
- 接口说明:创建一个
PreparedStatement
对象来执行给定的 SQL 语句,PreparedStatement
接口详细说明见下文 执行SQL。 - 参数说明:
sql
:预编译的 SQL 语句。
- 返回值:创建的
PreparedStatement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
String nativeSQL(String sql) throws SQLException
- 接口说明:将 SQL 语句转换为数据库特定的 SQL 语法。
- 参数说明:
sql
:要转换的 SQL 语句。
- 返回值:转换后的 SQL 语句。
- 异常:操作失败抛出
SQLException
异常。
void close() throws SQLException
- 接口说明:关闭数据库连接。
- 异常:操作失败抛出
SQLException
异常。
boolean isClosed() throws SQLException
- 接口说明:判断数据库连接是否已关闭。
- 返回值:
true
:已关闭,false
:未关闭。 - 异常:操作失败抛出
SQLException
异常。
DatabaseMetaData getMetaData() throws SQLException
- 接口说明:获取数据库的元数据。
- 返回值:数据库的元数据。
- 异常:操作失败抛出
SQLException
异常。
void setCatalog(String catalog) throws SQLException
- 接口说明:设置当前连接的默认数据库。
- 参数说明:
catalog
:要设置的数据库名称。
- 异常:操作失败抛出
SQLException
异常。
String getCatalog() throws SQLException
- 接口说明:获取当前连接的默认数据库。
- 返回值:当前连接的目录名称。
- 异常:操作失败抛出
SQLException
异常。
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
- 接口说明:创建一个
Statement
对象,指定ResultSet
类型和并发模式。 - 参数说明:
resultSetType
:ResultSet
类型。resultSetConcurrency
:并发模式。
- 返回值:创建的
Statement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
- 接口说明:创建一个
Statement
对象,指定ResultSet
类型、并发模式和持有性。 - 参数说明:
resultSetType
:ResultSet
类型。resultSetConcurrency
:并发模式。resultSetHoldability
:持有性。
- 返回值:创建的
Statement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
- 接口说明:创建一个
PreparedStatement
对象,指定 SQL、ResultSet
类型和并发模式。 - 参数说明:
sql
:预编译的 SQL 语句。resultSetType
:ResultSet
类型。resultSetConcurrency
:并发模式。
- 返回值:创建的
PreparedStatement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException
- 接口说明:创建一个
PreparedStatement
对象,指定 SQL、ResultSet
类型、并发模式和持有性。 - 参数说明:
sql
:预编译的 SQL 语句。resultSetType
:ResultSet
类型。resultSetConcurrency
:并发模式。resultSetHoldability
:持有性。
- 返回值:创建的
PreparedStatement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException
- 接口说明:创建一个
PreparedStatement
对象,指定 SQL 语句和自动生成键的标志。 - 参数说明:
sql
:预编译的 SQL 语句。autoGeneratedKeys
:指示是否应生成自动键的标志。
- 返回值:创建的
PreparedStatement
对象。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:创建一个
void setHoldability(int holdability) throws SQLException
- 接口说明:设置
ResultSet
对象的默认持有性。 - 参数说明:
holdability
:ResultSet
的持有性。
- 异常:操作失败抛出
SQLException
异常。
- 接口说明:设置
int getHoldability() throws SQLException
- 接口说明:获取
ResultSet
对象的默认持有性。 - 返回值:
ResultSet
的持有性。 - 异常:操作失败抛出
SQLException
异常。
- 接口说明:获取
boolean isValid(int timeout) throws SQLException
- 接口说明:检测数据库连接是否有效。
- 参数说明:
timeout
:等待有效性检查的超时时间,单位秒。
- 返回值:
true
:连接有效,false
:连接无效。 - 异常:操作失 败抛出
SQLException
异常。
void setClientInfo(String name, String value) throws SQLClientInfoException
- 接口说明:设置客户端信息属性。
- 参数说明:
name
:属性名。value
:属性值。
- 异常:设置失败抛出
SQLClientInfoException
异常。
void setClientInfo(Properties properties) throws SQLClientInfoException
- 接口说明:设置一组客户端信息属性。
- 参数说明:
properties
:属性集合。
- 异常:设置失败抛出
SQLClientInfoException
异常。
String getClientInfo(String name) throws SQLException
- 接口说明:获取指定的客户端信息属性值。
- 参数说明:
name
:属性名。
- 返回值:属性值。
- 异常:操作失败抛出
SQLException
异常。
Properties getClientInfo() throws SQLException
- 接口说明:获取所有客户端信息属性。
- 返回值:包含所有客户端信息属性的
Properties
对象。 - 异常:操作失败抛出
SQLException
异常。
无模式写入
注:下面 abstract 类型接口会被具体实现类实现,因此建立连接后得到连接对象可以直接调用。
abstract void write(String[] lines, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType, Integer ttl, Long reqId) throws SQLException
- 接口说明:以指定的协议类型、时间戳类型、TTL(生存时间)和请求 ID 写入多行数据。
- 参数说明:
lines
:待写入的数据行数组。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。ttl
:数据的生存时间,单位天。reqId
:请求 ID。
- 异常:操作失败抛出 SQLException 异常。
void write(String[] lines, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException
- 接口说明:以指定的协议类型和时间戳类型写入多行数据。
- 参数说明:
lines
:待写入的数据行数组。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。
- 异常:操作失败抛出 SQLException 异常。
void write(String line, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException
- 接口说明:以指定的协议类型和时间戳类型写入单行数据。
- 参数说明:
line
:待写入的数据行。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。
- 异常:操作失败抛出 SQLException 异常。
void write(List<String> lines, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException
- 接口说明:以指定的协议类型和时间戳类型写入多行数据(使用列表)。
- 参数说明:
lines
:待写入的数据行列表。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。
- 异常:操作失败抛出 SQLException 异常。
int writeRaw(String line, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType) throws SQLException
- 接口说明:以指定的协议类型和时间戳类型写入多行回车符分割的原始数据,回车符分割,并返回操作结果。
- 参数说明:
line
:待写入的原始数据。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。
- 返回值:操作结果。
- 异常:操作失败抛出 SQLException 异常。
abstract int writeRaw(String line, SchemalessProtocolType protocolType, SchemalessTimestampType timestampType, Integer ttl, Long reqId) throws SQLException
- 接口说明:以指定的协议类型、时间戳类型、TTL(生存时间)和请求 ID 写入多行回车符分割的原始数据,并返回操作结果。
- 参数说明:
line
:待写入的原始数据。protocolType
:协议类型:支持 InfluxDBLINE
,OpenTSDBTELNET
,OpenTSDBJSON
三种。timestampType
:时间戳类型,支持 HOURS,MINUTES,SECONDS,MILLI_SECONDS,MICRO_SECONDS 和 NANO_SECONDS。ttl
:数据的生存时间,单位天。reqId
:请求 ID。
- 返回值:操作结果。
- 异常:操作失败抛出 SQLException 异常。
执行 SQL
JDBC 驱动提供了符合 JDBC 标准的 Statement
接口,支持以下功能:
- 执行 SQL 语句:
Statement
接口主要用于执行静态 SQL 语句,并返回其生成的结果对象。 - 查询执行:可以执行返回数据集的查询(
SELECT
语句)。 - 更新执行:可以执行影响行数的 SQL 语句,如
INSERT
、UPDATE
、DELETE
等。 - 批量执行:支持批量执行多个 SQL 语句,以提高应用程序运行效率。
- 获取结果:可以获取查询执行后返回的结果集(
ResultSet
对象),并遍历查询返回的数据。 - 获取更新计数:对于非查询 SQL 语句,可以获取执行后影响的行数。
- 关闭资源:提供了关闭
Statement
对象的方法,以释放数据库资源。
另外 JDBC 驱动还提供了用于请求链路跟踪的扩展接口。
标准接口
-
ResultSet executeQuery(String sql) throws SQLException
- 接口说明:执行给定的 SQL 语句,该语句返回单个
ResultSet
对象。 - 参数说明:
sql
:要执行的 SQL 查询语句。
- 返回值:查询结果集
ResultSet
。 - 异常:执行查询过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:执行给定的 SQL 语句,该语句返回单个
-
int executeUpdate(String sql) throws SQLException
- 接口说明:执行给定的 SQL 语句,可以是
INSERT
或DELETE
语句,或不返回任何内容的 SQL 语句。 - 参数说明:
sql
:要执行的 SQL 更新语句。
- 返回值:受影响的行数。
- 异常:执行更新过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:执行给定的 SQL 语句,可以是
-
void close() throws SQLException
- 接口说明:立即释放此
Statement
对象的数据库和 JDBC 资源。 - 异常:关闭过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:立即释放此
-
int getMaxFieldSize() throws SQLException
- 接口说明:获取可以在
ResultSet
对象中读取的最大字符和二进制列值的字节数。 - 返回值:最大列大小。
- 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取可以在
-
int getQueryTimeout() throws SQLException
- 接口说明:获取当前
Statement
对象的查询超时时间。 - 返回值:查询超时时间(以秒为单位)。
- 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取当前
-
void setQueryTimeout(int seconds) throws SQLException
- 接口说明:设置当前
Statement
对象的查询超时时间。 - 参数说明:
seconds
:查询超时时间(以秒为单位)。
- 异常:设置过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:设置当前
-
boolean execute(String sql) throws SQLException
- 接口说明:执行给定的 SQL 语句,该语句可能返回多个结果。
- 参数说明:
sql
:要执行的 SQL 语句。
- 返回值:
true
表示返回的是ResultSet
对象;false
表示返回的是更新计数或没有结果。 - 异常:执行过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
-
ResultSet getResultSet() throws SQLException
- 接口说明:获取当前
Statement
对象生成的ResultSet
对象。 - 返回值:当前
Statement
对象生成的结果集。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取当前
-
int getUpdateCount() throws SQLException
- 接口说明:获取当前
Statement
对象执行的更新计数。 - 返回值:受影响的行数;如果当前结果是
ResultSet
对象或没有结果,则返回 -1。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取当前
-
boolean getMoreResults() throws SQLException
- 接口说明:移动到当前
Statement
对象的下一个结果,检查它是否为ResultSet
对象。 - 返回值:
true
表示下一个结果是ResultSet
对象;false
表示下一个结果是更新计数或没有更多结果。 - 异常:移动过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:移动到当前
-
int getFetchDirection() throws SQLException
- 接口说明:获取
Statement
对象从数据库中获取行的方向。 - 返回值:获取行的方向,TDengine 只支持
FETCH_FORWARD
方向。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取
-
void setFetchSize(int rows) throws SQLException
- 接口说明:提示 JDBC 驱动程序每次从数据库中获取多少行 。
- 参数说明:
rows
:每次获取的行数。
- 异常:设置过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
-
int getFetchSize() throws SQLException
- 接口说明:获取
Statement
对象的默认获取大小。 - 返回值:默认的获取大小。
- 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取
-
int getResultSetConcurrency() throws SQLException
- 接口说明:获取
ResultSet
对象的并发模式。 - 返回值:
ResultSet
对象的并发模式。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取
-
int getResultSetType() throws SQLException
- 接口说明:获取
ResultSet
对象的类型。 - 返回值:
ResultSet
对象的类型。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取
-
void addBatch(String sql) throws SQLException
- 接口说明:将给定的 SQL 语句添加到当前
Statement
对象的批处理中。 - 参数说明:
sql
:要添加到批处理中的 SQL 语句。
- 异常:添加过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:将给定的 SQL 语句添加到当前
-
void clearBatch() throws SQLException
- 接口说明:清空当前
Statement
对象的批处理。 - 异常:清空过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:清空当前
-
int[] executeBatch() throws SQLException
- 接口说明:执行批处理中的所有 SQL 语句。
- 返回值:批处理中每个 SQL 语句影响的行数。
- 异常:执行过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
-
Connection getConnection() throws SQLException
- 接口说明:获取产生此
Statement
对象的Connection
对象。 - 返回值:产生此
Statement
对象的数据库连接。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取产生此
-
int getResultSetHoldability() throws SQLException
- 接口说明:获取
ResultSet
对象的可保持性。 - 返回值:
ResultSet
对象的可保持性。 - 异常:获取过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:获取
-
boolean isClosed() throws SQLException
- 接口说明:检查此
Statement
对象是否已关闭。 - 返回值:
true
表示此Statement
对象已关闭;false
表示未关闭。 - 异常:检查过程中发生数据库访问错误或其他错误,将抛出
SQLException
异常。
- 接口说明:检查此
扩展 接口
扩展接口主要用于请求链路跟踪。
-
ResultSet executeQuery(String sql, Long reqId) throws SQLException
- 接口说明:执行给定的 SQL 查询语句
- 参数说明:
sql
:要执行的 SQL 查询语句reqId
:请求 id
- 返回值:包含查询结果的
ResultSet
对象 - 异常:执行查询失败抛出
SQLException
异常
-
int executeUpdate(String sql, Long reqId) throws SQLException
- 接口说明:执行给定的 SQL 更新语句
- 参数说明:
sql
:要执行的 SQL 更新语句reqId
:请求 id
- 返回值:表示受影响的行数
- 异常:执行更新失败抛出
SQLException
异常
-
boolean execute(String sql, Long reqId) throws SQLException
- 接口说明:执行给定的 SQL 语句,该语句可能是 INSERT、UPDATE、DELETE 或者 DDL 语句
- 参数说明:
sql
:要执行的 SQL 语句reqId
:请求 id
- 返回值:如果第一个结果是
ResultSet
对象,则返回true
;如果是更新计数或者没有结果,则返回false
- 异常:执行语句失败抛出
SQLException
异常
结果获取
JDBC 驱动支持标准的 ResultSet 接口,以及对应的结果集元数据 ResultSetMetaData 接口,提供了用于读取结果集中元数据和数据的方法。
结果集
JDBC 驱动支持标准的 ResultSet 接口,提供了用于读取结果集中元数据和数据的方法。
-
ResultSetMetaData getMetaData() throws SQLException
- 接口说明:获取此 ResultSet 对象的列的数量、类型和属性。
- 返回值:此 ResultSet 对象的数据的 ResultSetMetaData 对象。
- 异常:如果发生数据库访问错误,将抛出 SQLException 异常。
-
boolean next() throws SQLException
- 接口说明:将游标从当前位置向前移动一行。用于遍历查询结果集。
- 返回值:如果新的当前行有效,则返回 true;如果结果集中没有更多行,则返回 false。
- 异常:如果发生数据库访问错误,将抛出 SQLException 异常。
-
void close() throws SQLException
- 接口说明:立即释放此 ResultSet 对象的数据库和 JDBC 资源,而不是等待该对象自动关闭时的资源释放。
- 异常:如果发生数据库访问错误,将抛出 SQLException 异常。
-
boolean wasNull() throws SQLException
- 接口说明:报告上一次读取的列值是否为 NULL。
- 返回值:如果上一次读取的列值是 NULL,则返回 true;否则返回 false。
- 异常