ITPub博客

首页 > 数据库 > 数据库开发技术 > 介绍一个小巧的开源数据库工具henplus

介绍一个小巧的开源数据库工具henplus

原创 数据库开发技术 作者:数据库杂记 时间:2019-09-13 09:09:11 0 删除 编辑

以前自己也写过一些小工具。比如xsql cmd client,  JMyETL.  后来由于时间关系, 基本上没有持续维护。本文介绍一款用java实现的henplus数据库客户端工具,使用jdbc连接数据库,对于常规的sql命令操作以及库表数据的导入导出操作来说,非常方便。


下载及编译,请自行google。 不过,具体到某一个平台,最好自己手动整理一下build出来的结果。

我最后整理出来的henplus.bat内容如下:

@echo off:: henplus.bat - Windows script to launch SQL shellecho "%~dp0*"java -cp "%~dp0*" henplus.HenPlus %*
:: End henplus.bat

将它放到一个单独的目录:henplus下,这个目录同时放入其它要用到的jar文件,至少包含下边几个文件:

09/11/2019  11:12 AM            41,123 commons-cli-1.2.jar09/11/2019  11:12 AM           249,503 henplus.jar05/01/2009  10:46 PM             7,739 libreadline-java-0.8.0.jar

本文就以HANA的连接为例,简单介绍一下,上边的四个文件就可以运行那个客户端工具了。但是没有任何jdbc驱动。也就连不了任何数据库。

1.  放入具体的jdbc 驱动: HANA的是:

07/03/2016  04:49 PM           815,821 com.sap.db.jdbc-1.00.61.380109.jar

2. 进到henplus目录,注册驱动: 

C:\SAPDevelop\work\learnings\henplus>henplus.bat"C:\SAPDevelop\work\learnings\henplus\*"no readline found (no JavaReadline in java.library.path). Using simple stdin.using GNU readline (Brian Fox, Chet Ramey), Java wrapper by Bernhard Bablokcreating henplus config dirhenplus config at C:\Users\i062873\.henplus---------------------------------------------------------------------------- HenPlus II 0.9.8 "Yay Labor Day" Copyright(C) 1997..2009 Henner Zeller <H.Zeller@acm.org> HenPlus is provided AS IS and comes with ABSOLUTELY NO WARRANTY This is free software, and you are welcome to redistribute it under the conditions of the GNU Public License <http://www.gnu.org/licenses/gpl2.txt>----------------------------------------------------------------------------Hen*Plus> list-driversloaded drivers are marked with '*' (otherwise not found in CLASSPATH)------------+---------------------------------+---------+---------------------------------------+[1m    for    [m |[1m          driver class          [m |[1m Version[m |[1m              sample url              [m |------------+---------------------------------+---------+---------------------------------------+   Adabas   | de.sag.jdbc.adabasd.ADriver     | [1;30m[NULL] [m | jdbc:adabasd://localhost:7200/work    |   DB2      | COM.ibm.db2.jdbc.net.DB2Driver  | [1;30m[NULL] [m | jdbc:db2://localhost:6789/foobar      |   MySQL    | org.gjt.mm.mysql.Driver         | [1;30m[NULL] [m | jdbc:mysql://localhost/foobar         |   Oracle   | oracle.jdbc.driver.OracleDriver | [1;30m[NULL] [m | jdbc:oracle:thin:@localhost:1521:ORCL |   Postgres | org.postgresql.Driver           | [1;30m[NULL] [m | jdbc:postgresql://localhost/foobar    |   SAP-DB   | com.sap.dbtech.jdbc.DriverSapDB | [1;30m[NULL] [m | jdbc:sapdb://localhost/foobar         |------------+---------------------------------+---------+---------------------------------------+Hen*Plus> register hana com.sap.db.jdbc.DriverHen*Plus> list-driversloaded drivers are marked with '*' (otherwise not found in CLASSPATH)------------+---------------------------------+---------+---------------------------------------+[1m    for    [m |[1m          driver class          [m |[1m Version[m |[1m              sample url              [m |------------+---------------------------------+---------+---------------------------------------+   Adabas   | de.sag.jdbc.adabasd.ADriver     | [1;30m[NULL] [m | jdbc:adabasd://localhost:7200/work    |   DB2      | COM.ibm.db2.jdbc.net.DB2Driver  | [1;30m[NULL] [m | jdbc:db2://localhost:6789/foobar      |   MySQL    | org.gjt.mm.mysql.Driver         | [1;30m[NULL] [m | jdbc:mysql://localhost/foobar         |   Oracle   | oracle.jdbc.driver.OracleDriver | [1;30m[NULL] [m | jdbc:oracle:thin:@localhost:1521:ORCL |   Postgres | org.postgresql.Driver           | [1;30m[NULL] [m | jdbc:postgresql://localhost/foobar    |   SAP-DB   | com.sap.dbtech.jdbc.DriverSapDB | [1;30m[NULL] [m | jdbc:sapdb://localhost/foobar         | * hana     | com.sap.db.jdbc.Driver          | 1.0     | [1;30m[NULL]                               [m |------------+---------------------------------+---------+---------------------------------------+Hen*Plus>注册成功。这之后就可以连接相应的数据库了。

3. 连接目标数据源,执行相应的数据库操作,简单至极,请看下边的操作

Hen*Plus> help help | ?                                 : provides help for commands about | version | license                : about HenPlus exit | quit                              : exits HenPlus echo | prompt                            : echo argument list-plugins | plug-in | plug-out        : handle Plugins list-drivers | register | unregister     : handle JDBC drivers list-aliases | alias | unalias           : handle Aliases list-key-bindings | bind-key-cmd         : handle function key bindings load | start | @ | @@                    : load file and execute commands connect | disconnect | rename-session | switch | sessions: manage sessions status                                   : show status of this connection tables | views | procedures | rehash     : list available user objects describe | idescribe                     : describe a database object tree-view <tablename>                    : tree representation of connected tables import | import-check | import-print     : import delimited data into table dump-out | dump-in | verify-dump | dump-conditional | dump-select: handle table dumps system | !                               : execute system commands spool <filename>|off                     : log output to a file set-var | unset-var | unset-all          : set/unset variables set-property | reset-property            : set global HenPlus properties set-session-property | reset-session-property: set SQL-connection specific properties system-info                              : print out some system information like memory usage.Full documentation at http://henplus.sf.net/config read from [C:\Users\******\.henplus]
Hen*Plus> connect jdbc:sap://zeus.hana.canary.eu-central-1.whitney.dbaas.ondemand.com:22116?encrypt=true&validateCertificate=false&currentschema=37660BF7A8944CC692E41368012F0270HenPlus II connecting url 'jdbc:sap://*****.eu-central-1.whitney.dbaas.ondemand.com:22116?encrypt=true&validateCertificate=false&currentschema=37660BF7A8944CC692E41368012F0270' driver version 1.0[10]: authentication failed============ authorization required ===Username: 37660BF7A89**********V3VRN6M6TBONV_RTPassword: Xk3CKpjX86L***************QnaFEAIpcrT_YX01m0zTAtotYPassword: *********** HDB - 2.00.40.00.1545918182 read committed *37660BF7A8944C****0_6SASTBJK1JT9V3VRN6M6TBONV_RT@abcdef****.dbaas.ondemand.com> tables
----------------------------------+---------------------------------+------------+---------+←[1m TABLE_SCHEM ←[m |←[1m TABLE_NAME ←[m |←[1mTABLE_TYPE←[m |←[1m REMARKS←[m |----------------------------------+---------------------------------+------------+---------+ 37660BF7A8944CC692E41368012F0270 | ANALYTICS_AGGREGATION_DATA | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | ANALYTICS_SHARDING_DBMAPPING | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | ANALYTICS_SHARDING_JOB_STATUS | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | ANALYTICS_SHARDING_PROVSIONING | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | ANALYTICS_SHARDING_TABLE_STATUS | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | CLIENT_FEEDBACK | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | CLIENT_USAGE | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | CLIENT_USERS | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | DIMENSION_MAPPING | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | METRIC_METADATA | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | METRIC_METADATA_EXT | TABLE | ←[1;30m[NULL] ←[m | 37660BF7A8944CC692E41368012F0270 | SMP_STATISTICS | TABLE | ←[1;30m[NULL] ←[m | SYS | CS_BOE_PORTAL_SEARCH | TABLE | ←[1;30m[NULL] ←[m | _SYS_BI | BIMC_ALL_SOURCES | TABLE | ←[1;30m[NULL] ←[m |----------------------------------+---------------------------------+------------+---------+14 Tables found.
导出某表的前100行数据:ntral-1.whitney.dbaas.ondemand.com> dump-select top100statistics.dump.gz SMP_STATISTICS SELECT TOP 100 * FROM SMP_STATISTICS;cannot handle type '0' for field 'CORRELATION_ID'; trying String..dump SMP_STATISTICS:(100 rows)dumping 'SMP_STATISTICS' took 103 msec total; 1.030 msec / row这时你打开文件top100statistics.dump,会发现它是一种json格式的文件,可读性非常好。////////////////////////////////(tabledump 'SMP_STATISTICS' (file-encoding 'UTF-8') (dump-version 1 1) (henplus-version '0.9.8') (time '2019-09-13 00:13:47.961') (database-info 'HDB - 2.00.40.00.1545918182') (estimated-rows '-1') (meta ('METRIC_NAME', 'METRIC_TIMESTAMP', 'VALUE' , 'ORGANIZATION_ID', 'SPACE_ID', 'APP_ID', 'SERVICE_NAME', 'CUSTOM1', 'CUSTOM2', 'CUSTOM3', 'CUSTOM4', 'CORRELATION_ID', 'SUBSCRIBER_ZONE_ID', 'IN_SHARDING') ('STRING' , 'TIMESTAMP' , 'NUMERIC', 'STRING' , 'STRING' , 'STRING', 'STRING' , 'STRING' , 'STRING' , 'STRING' , 'STRING' , 'STRING' , 'STRING' , 'STRING' )) (data ('proxy_request_payload_size','2019-04-16 03:28:08.541',0,'d9d8680d-95c8-406e-8e6d-fa16de8faa39','0d492cc4-db5a-496e-b4d1-49240b052e4b','testoffline1','service-proxy',NULL,NULL,NULL,NULL,'ecde012d-98c9-442c-58fc-4385b3b36683','4a79476a-b15d-4305-8cde-9378a46b5b69',NULL) ('proxy_request_payload_size','2019-04-16 ........... (rows 100))

从上边的help可以看到,它除了SQL中的D*L命令,还支持dump多表,单表,条件,以及SELECT等导出导入。


4. 再来一两个示例:

Hen*Plus> connect jdbc:sap://mo-2544e1cd3.mo.sap.corp:30015/?currentschema=mygomobile&databaseName=mygomobileHenPlus II connecting url 'jdbc:sap://mo-2544e1cd3.mo.sap.corp:30015/?currentschema=mygomobile&databaseName=mygomobile' driver version 1.0[10]: authentication failed============ authorization required ===Username: gomobilePassword:Password:  HDB - 2.00.37.00.1552531011 read committed *  gomobile@sap:mo-2544e1cd3.mo.sap.corp> describe t123describing table: 'T123' (corrected name)Table: T123---+--------+-------------+------+---------+-----------------------------+----+?[1m #?[m |?[1m column?[m |?[1m    type    ?[m |?[1m null?[m |?[1m default?[m |?[1m        pk             ?[m |?[1m fk?[m |---+--------+-------------+------+---------+-----------------------------+----+ 1 | ID     | INTEGER(10) | NO   | ?[1;30m[NULL] ?[m | _SYS_TREE_CS_#157698_#0_#P0 || 2 | COL2   | VARCHAR(32) | YES  | ?[1;30m[NULL] ?[m |                             ||---+--------+-------------+------+---------+-----------------------------+----+1.940 secgomobile@sap:mo-2544e1cd3.mo.sap.corp> create table ABC(id int primary key, col2 varchar(32), col3 clob, col4 datetime);affected 0 rows (21 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> insert into ABC values(1, 'abc', 'abcdef', '2019-09-13 07:02:05');affected 1 rows (126 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> insert into ABC values(5, 'abc5', 'abcdef', '2019-09-13 07:02:06');affected 1 rows (15 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> insert into ABC values(3, 'abc3', 'ab3cdef', '2019-09-13 08:02:06');affected 1 rows (17 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> select count(*) from ABC;----------+←[1m COUNT(*)←[m |----------+ 3        |----------+1 row in result (first row: 17 msec; total: 25 msec)
//导出表ABC试一下:gomobile@sap:mo-2544e1cd3.mo.sap.corp> dump-out ABC.dump.gz ABC;dump ABC:.................................................................(3 rows)dumping 'ABC' took 400 msec total; 133.333 msec / row
//清空表ABC, 再导入:gomobile@sap:mo-2544e1cd3.mo.sap.corp> truncate table ABC;affected 0 rows (351 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> select count(*) from ABC;----------+←[1m COUNT(*)←[m |----------+ 0 |----------+1 row in result (first row: 65 msec; total: 67 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp> dump-in ABC.dump.gzimporting table dump created with HenPlus 0.9.8for table : ABCfrom database : HDB - 2.00.37.00.1552531011at : 2019-09-13 01:04:07.807dump format version : 1.................................................................ok.(3 rows total / 0 with errors; 167 msec total; 55.666 msec / row)gomobile@sap:mo-2544e1cd3.mo.sap.corp> SELECT * FROM ABC;----+------+---------+-------------------------------+←[1m ID←[m |←[1m COL2←[m |←[1m COL3 ←[m |←[1m COL4 ←[m |----+------+---------+-------------------------------+ 1 | abc | abcdef | 2019-09-13 07:02:05.000000000 | 5 | abc5 | abcdef | 2019-09-13 07:02:06.000000000 | 3 | abc3 | ab3cdef | 2019-09-13 08:02:06.000000000 |----+------+---------+-------------------------------+3 rows in result (first row: 16 msec; total: 34 msec)gomobile@sap:mo-2544e1cd3.mo.sap.corp>我们发现数据最后完美导入。

简单用法应该是足够了。

原文作者:数据库杂记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-04-22

  • 博文量
    276
  • 访问量
    160270