小小狠招:巧妙使用HANA数据库的jdbc driver

2024-03-31 13:36

本文主要是介绍小小狠招:巧妙使用HANA数据库的jdbc driver,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SAP旗下的HANA数据库,实际上是分为两个系列进行发布,一种是基于本地部署的称之为HANA Platform。另一种是面向Cloud平台的,称之为HANA Cloud。

在实际使用当用,因为两者基本上共用同一代码库,除个别地方略有差异以外,我们可以共用它们的JDBC driver。

本文就简要介绍一下这个driver的几个非常有用的小技巧,你会感觉到,普普通通的jdbc驱动,也能做很多事情。

实例

获取hana cloud jdbc driver:

我们从:https://mvnrepository.com/artifact/com.sap.cloud.db.jdbc/ngdbc可以得到较新版本的hana JDBC。

也能看到包的定义:

<!-- https://mvnrepository.com/artifact/com.sap.cloud.db.jdbc/ngdbc -->
<dependency><groupId>com.sap.cloud.db.jdbc</groupId><artifactId>ngdbc</artifactId><version>2.20.11</version><type>pom</type>
</dependency>

顺着里边的说明,也可以看到:对应的帮助文档:

https://help.sap.com/docs/SAP_HANA_CLIENT/f1b440ded6144a54ada97ff95dac7adf/434e2962074540e18c802fd478de86d6.html

我们使用单个命令行,就可以下载得到该文件:

mvn dependency:get -DgroupId=com.sap.cloud.db.jdbc -DartifactId=ngdbc -Dversion=2.20.11 -Dtransitive=false
mvn dependency:copy -Dartifact=com.sap.cloud.db.jdbc:ngdbc:2.20.11 -DoutputDirectory=./

第一个命令会下载驱动到你的repository的相关子目录当中。第二个命令会将对应的文件重新复制到你指定的目录:-DoutputDirectory=./  最终会得到文件: ngdbc-2.20.11.jar

当然,你也可以直接从SAP官网上下载相应的完整的client包,它里边也包含有完整的JDBC驱动。

当作命令行连接HANA

java -jar ngdbc-2.20.11.jar -u SYSTEM,<password> -n <ip_address>:30215 -c "SELECT DATABASE_NAME,version FROM SYS.M_DATABASES" -w 50
| DATABASE_NAME                                      | VERSION                          |
-----------------------------------------------------------------------------------------
| HDB                                                | 2.00.070.00.1679989823           |
1 rows.
实例2: 查询数据库服务器上所有安装版本历史:
java -jar ngdbc-2.20.11.jar -u SYSTEM,<password> -n <ip_address>:30215 -c "SELECT * FROM SYS.M_DATABASE_HISTORY"| INSTALL_TIME                | VERSION                          |
------------------------------------------------------------------
| 2017-01-17 09:38:19.0000000 | 1.00.112.04.1467296086           |
| 2017-04-19 09:20:18.0000000 | 2.00.002.00.1490188421           |
| 2017-06-12 09:19:44.0000000 | 2.00.011.00.1493936640           |
| 2017-07-07 10:34:05.0000000 | 2.00.012.00.1498457145           |
| 2018-07-16 09:40:12.0000000 | 2.00.031.00.1528768600           |
| 2018-09-24 05:50:11.0000000 | 2.00.032.00.1533114046           |
| 2019-02-05 04:43:35.0000000 | 2.00.036.00.1547699771           |
| 2019-09-20 03:32:26.0000000 | 2.00.042.00.1564994110           |
| 2020-02-13 12:02:42.0000000 | 2.00.044.00.1571081837           |
| 2020-05-06 14:04:11.0000000 | 2.00.047.00.1586595995           |
| 2020-10-06 06:01:18.0000000 | 2.00.052.00.1599235305           |
| 2021-01-18 06:15:01.0000000 | 2.00.053.00.1605092543           |
| 2021-02-05 09:46:59.0000000 | 2.00.054.00.1611906357           |
| 2021-05-19 10:25:57.0000000 | 2.00.055.00.1615413201           |
| 2021-09-10 02:38:40.0000000 | 2.00.057.00.1629894416           |
| 2021-10-18 10:39:57.0000000 | 2.00.058.00.1634122452           |
| 2021-11-22 03:29:50.0000000 | 2.00.059.00.1636704142           |
| 2022-02-16 11:20:29.0000000 | 2.00.061.00.1644229038           |
| 2022-05-24 06:05:26.0000000 | 2.00.062.00.1650891137           |
| 2022-10-12 03:49:19.0000000 | 2.00.064.00.1660047502           |
| 2022-11-23 04:35:13.0000000 | 2.00.065.00.1665753120           |
| 2023-01-27 05:55:29.0000000 | 2.00.066.00.1671096120           |
| 2023-05-18 06:08:25.0000000 | 2.00.070.00.1679989823           |

你只要在 -c 后边传入相应的命令行即可。有意思吧。这也算是一个简单的命令行客户端了。

最简单的,你可以直接针对jar不带任何参数,它会输出当前的时间戳(来自服务器的时间)。

java -jar ngdbc-2.20.11.jar -u SYSTEM,<password> -n <ip_address>:30215
| CURRENT_TIMESTAMP           |
-------------------------------
| 2024-03-28 21:08:48.0890000 |

完整的命令行格式是这样的:

java -jar ngdbc.jar -u <user,password>[-n <hostname:port>][-i <instance-number>][-d <database-name>][-o <connect-option>][-w <maximum-column-width>[-c <sql-command>]

一些重要的开关

其实,这里主要是强调:JDBC Tracing and Trace Options的用法。在你实际开发应用过程当中,添加适当的开关,能帮你快速定位问题。

1、直接在jdbc连接串中设置
jdbc:sap://localhost:30015/?autocommit=false&traceFile=traceFile.txt&traceOptions=CONNECTIONS,API,PACKET,TIMESTAMPS,ELAPSEDTIMES,FAILURE_ACTION_STDERR

这里就设置了很多跟踪选项:CONNECTIONS,API,PACKET,TIMESTAMPS,ELAPSEDTIMES,FAILURE_ACTION_STDERR

2、在命令行里头直接设置
  • 获取当前配置项

java -jar ngdbc-2.20.11.jar SHOWDriver version                               : 2.20.11-354e45de0dcbabd02f58c506ecf1138161ee4b1eSettings file name                           : ~/.sdb/jdbctracesettings.iniShared memory file name                      : ~/.sdb/jdbctrace.shmConfigurationTrace                                        : DisabledTrace file name                              : jdbctrace.prtTRACE CONNECTIONS                            : OnTRACE API                                    : OnTRACE PACKET                                 : OnTRACE DISTRIBUTION                           : OffTRACE STATISTICS                             : OffTRACE CLEANERS                               : OnTRACE DEBUG                                  : OffShow plain-text client-side encrypted values : DisabledShow timestamps                              : DisabledShow elapsed times                           : DisabledTrace file size                              : UnlimitedStop on error                                : DisabledTrace failure action                         : IgnorePerformance trace                            : DisabledPerformance trace file name                  : jdbcperformancetrace.prt
  • 直接设置选项举例

java -jar ngdbc-2.20.11.jar TRACE ON
//Driver version                               : 2.20.11-354e45de0dcbabd02f58c506ecf1138161ee4b1eSettings file name                           : /Users/i062873/.sdb/jdbctracesettings.iniShared memory file name                      : /Users/i062873/.sdb/jdbctrace.shmConfigurationTrace                                        : EnabledTrace file name                              : jdbctrace.prtTRACE CONNECTIONS                            : OnTRACE API                                    : OnTRACE PACKET                                 : OnTRACE DISTRIBUTION                           : OffTRACE STATISTICS                             : OffTRACE CLEANERS                               : OnTRACE DEBUG                                  : OffShow plain-text client-side encrypted values : DisabledShow timestamps                              : DisabledShow elapsed times                           : DisabledTrace file size                              : UnlimitedStop on error                                : DisabledTrace failure action                         : IgnorePerformance trace                            : DisabledPerformance trace file name                  : jdbcperformancetrace.prt

这样我样可以在相同路径下边的jdbctrace*.prt文件里头得到trace的内容:

    <Part PartKind=ResultSetID(13) PartAttributes=0(none) ArgumentCount=1 BigArgumentCount=0 BufferLength=8 BufferSize=29816><PartBuffer>0 | b5 97 c0 10 65 72 05 00                         | ....er..         |</PartBuffer></Part><Part PartKind=StatementContext(39) PartAttributes=0(none) ArgumentCount=4 BigArgumentCount=0 BufferLength=206 BufferSize=29792><PartBuffer>0 | 01 21 ac 00 01 00 00 00 00 00 00 00 68 17 c6 05 | .!..........h... |10 | 00 00 00 00 e2 46 b2 42 00 00 00 00 bc e5 53 3d | .....F.B......S= |20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |30 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |50 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |70 | 00 00 00 00 00 00 00 00 00 00 00 00 00 15 13 02 | ................ |80 | e2 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |90 | 00 00 40 b0 01 00 00 00 00 00 00 00 00 00 00 00 | ..@............. |a0 | 00 00 00 00 76 80 34 5c 08 d7 24 00 9d 0a 96 ad | ....v.4\..$..... |b0 | 02 04 03 03 00 00 00 00 00 00 07 04 bd 01 00 00 | ................ |c0 | 00 00 00 00 08 04 20 bb 00 00 00 00 00 00       | ...... .......   |
.....

这些TRACE的内容非常有用。尤其是在遇到你认为是BUG的时候,可以将这些TRACE文件作为佐证,提供给SAP官方,便于他们去修复问题。

由于这是一个基于操作系统用户级的设置。当你设置完使用完之后,可以再将其恢复到原来的状态:

java -jar ngdbc-2.20.11.jar TRACE OFF
3、启动图形方式进行设置

既然有命令行方式,那同时也就有了GUI方式。我们用-g选项就可以启动。

java -jar ngdbc-2.20.11.jar -g

图片

image-20240329072459665

所有可以配置的参数项,一目了然。

1)有enable tracing的,下边可以指定trace文件,trace级别,以及时间戳大小,是否明文显示。

2)是否启用关于性能的tracing,这个对于测量性能指标也非常重要。

总结

一个小小的jdbc驱动,HANA数据库为它提供的功能还是比较强悍的。在关键的时候,能起到非常大的作用。如果只是一些非常简单的连接性需求,甚至不需要任何第三方工具,直接使用简单的命令行就可以顺利完成。

这篇关于小小狠招:巧妙使用HANA数据库的jdbc driver的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/864465

相关文章

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实