作者: zyl910

一、缘由

当数据库服务器很多时,或者要与第三方公司做数据库表交换时,此时觉得若有一个简单快捷的数据库连接测试工具就好了。

因为若是采取直接把程序部署到tomcat等容器再测试的办法,那就太费功夫了。

其次,连上数据库后最好能显示一下数据库名称、版本等基础信息,这样便能判定所连的数据库是否正确。

二、用法

考虑到为了能一次性测试多个数据库连接。于是我将它设计成一个命令行工具。

它的命令参数格式为: zjdbcping <driverClassName> <url> <username> <password>

  • <driverClassName>: 驱动类的全名. 例如 oracle.jdbc.driver.OracleDriver
  • <url>: JDBC连接串. 因为有可能会包含特殊资费,故建议用双引号括起来,例如 "jdbc:oracle:thin:@192.168.3.33:1521:zjkf"
  • <username>: 数据库账号.
  • <password>: 数据库密码.

具体运行时,还注意得用java命令来运行,并指定加载驱动 jar. 例如——

java -Xbootclasspath/a:"ojdbc6.jar" -jar zjdbcping.jar oracle.jdbc.driver.OracleDriver "jdbc:oracle:thin:@192.168.3.33:1521:zjkf" crjapp crjapp

运行结果如下——

zjdbcping <driverClassName> <url> <username> <password>

getCatalog:	null
getClientInfo:
-- listing properties --
getMetaData:
getDatabaseMajorVersion: 11
getDatabaseMinorVersion: 2
getDatabaseProductName: Oracle
getDatabaseProductVersion: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
getDefaultTransactionIsolation: 2
getDriverMajorVersion: 11
getDriverMinorVersion: 2
getDriverName: Oracle JDBC driver
getDriverVersion: 11.2.0.1.0
getJDBCMajorVersion: 11
getJDBCMinorVersion: 2
getURL: jdbc:oracle:thin:@192.168.3.33:1521:zjkf
getUserName: CRJAPP
getClientInfoProperties:
#getColumnCount: 4
NAME MAX_LEN DEFAULT_VALUE DESCRIPTION
#RowCount: 0

一般情况下,写个bat(或 sh)脚本来测试会比较方便,例如 “zjdbcping.bat” ——

java -Xbootclasspath/a:"ojdbc6.jar" -jar zjdbcping.jar oracle.jdbc.driver.OracleDriver "jdbc:oracle:thin:@192.168.3.33:1521:zjkf" crjapp crjapp
pause

三、源码

ZJdbcPing.java ——

package org.zyl910.zjdbcping;

import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Properties; /** 测试Jdbc连接.
*
* @author zhouyuelin
*
*/
public class ZJdbcPing {
public static void main(String[] args) {
PrintStream outs = System.out;
// title.
outs.println("zjdbcping <driverClassName> <url> <username> <password>");
// oracle.jdbc.driver.OracleDriver "jdbc:oracle:thin:@192.168.3.33:1521:zjkf" crjapp crjapp
outs.println();
// args.
String driverClassName="";
String url="";
String username="";
String password="";
if (args.length>0) driverClassName=args[0];
if (args.length>1) url=args[1];
if (args.length>2) username=args[2];
if (args.length>3) password=args[3];
// connect.
Connection conn = null;
try {
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, password);
}
catch(Throwable ex) {
ex.printStackTrace(outs);
}
if (null==conn) return;
// info.
try {
outs.println(String.format("getCatalog:\t%s", conn.getCatalog()));
outs.println("getClientInfo:");
Properties properties = conn.getClientInfo();
properties.list(outs);
//outs.println("getTypeMap:");
//Map<String,Class<?>> typeMap = conn.getTypeMap();
//for(String key: typeMap.keySet()) {
// Class<?> c = typeMap.get(key);
// outs.println(String.format("\t%s:\t%s", key, c.toString()));
//}
outs.println("getMetaData:");
DatabaseMetaData databaseMetaData = conn.getMetaData();
printDatabaseMetaData(outs, databaseMetaData, "\t");
}
catch(Throwable ex) {
ex.printStackTrace(outs);
}
finally {
try {
conn.close();
}
catch(Throwable ex) {
ex.printStackTrace(outs);
}
}
return;
} private static void printDatabaseMetaData(PrintStream outs,
DatabaseMetaData dbmd, String prefix) throws Exception {
if (null==outs) return;
if (null==dbmd) return;
outs.println(prefix+String.format("getDatabaseMajorVersion:\t%d", dbmd.getDatabaseMajorVersion()));
outs.println(prefix+String.format("getDatabaseMinorVersion:\t%d", dbmd.getDatabaseMinorVersion()));
outs.println(prefix+String.format("getDatabaseProductName:\t%s", dbmd.getDatabaseProductName()));
outs.println(prefix+String.format("getDatabaseProductVersion:\t%s", dbmd.getDatabaseProductVersion()));
outs.println(prefix+String.format("getDefaultTransactionIsolation:\t%d", dbmd.getDefaultTransactionIsolation()));
outs.println(prefix+String.format("getDriverMajorVersion:\t%d", dbmd.getDriverMajorVersion()));
outs.println(prefix+String.format("getDriverMinorVersion:\t%d", dbmd.getDriverMinorVersion()));
outs.println(prefix+String.format("getDriverName:\t%s", dbmd.getDriverName()));
outs.println(prefix+String.format("getDriverVersion:\t%s", dbmd.getDriverVersion()));
outs.println(prefix+String.format("getJDBCMajorVersion:\t%d", dbmd.getJDBCMajorVersion()));
outs.println(prefix+String.format("getJDBCMinorVersion:\t%d", dbmd.getJDBCMinorVersion()));
outs.println(prefix+String.format("getURL:\t%s", dbmd.getURL()));
outs.println(prefix+String.format("getUserName:\t%s", dbmd.getUserName()));
ResultSet rs = dbmd.getClientInfoProperties();
outs.println(prefix+"getClientInfoProperties:");
printResultSet(outs, rs, prefix+"\t");
rs.close();
} private static void printResultSet(PrintStream outs, ResultSet rs,
String prefix) throws Exception {
if (null==outs) return;
if (null==rs) return;
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
outs.println(prefix+String.format("#getColumnCount:\t%d", cols));
// col.
if (true) {
outs.print(prefix);
for(int i=1; i<=cols; ++i) {
if (i>1) outs.print('\t');
String str = rsmd.getColumnName(i);
outs.print(str);
}
outs.println();
}
// rows.
int rows = 0;
while(rs.next()) {
++rows;
outs.print(prefix);
for(int i=1; i<=cols; ++i) {
if (i>1) outs.print('\t');
Object o = null;
String str = null;
try {
o = rs.getObject(i);
if (null!=o)
str = o.toString();
}
catch(Exception ex) {
str = String.format("(%s)", ex.getMessage());
}
outs.print(str);
}
outs.println();
}
outs.println(prefix+String.format("#RowCount:\t%d", rows));
} }

下载地址——

https://git.coding.net/zyl910/zjdbcping.git

[Java] zjdbcping:JDBC数据库连接测试工具的更多相关文章

  1. JDBC数据库连接测试工具

    贴代码 import java.io.PrintStream; import java.sql.*; import java.util.Properties; public class ZJdbcPi ...

  2. 纯 Java 开发 WebService 调用测试工具(wsCaller.jar)

    注:本文来自hacpai.com:Tanken的<纯 Java 开发 WebService 调用测试工具(wsCaller.jar)>的文章 基于 Java 开发的 WebService ...

  3. 基于Java的四大开源测试工具

    摘要:成功的应用程序离不开测试人员和QA团队反复地测试,应用程序在进行最后的部署之前,需要通过测试来确保它的负载管理能力以及在特殊情况下的工作条件和工作加载情况. %R[)vA t]N0 测试是应用程 ...

  4. Java自学-JDBC 数据库连接池

    数据库连接池 与线程池类似的,数据库也有一个数据库连接池. 不过他们的实现思路是不一样的. 本章节讲解了自定义数据库连接池类:ConnectionPool,虽然不是很完善和健壮,但是足以帮助大家理解C ...

  5. JAVA之JDBC数据库连接池总结篇

    JDBC数据库连接池 一.JDBC数据库连接池的必要性 二.数据库连接池技术 三.多种开源的数据库连接池 3.1 C3P0数据库连接池 3.2 DBCP数据库连接池 3.3 Druid(德鲁伊)数据库 ...

  6. Java测试工具

    1.   开源测试工具: http://www.open-open.com/43.htm 2.   10款常用的JAVA测试工具 :http://developer.51cto.com/art/200 ...

  7. Socket测试工具(客户端、服务端)

    Socket是什么? SOCKET用于在两个基于TCP/IP协议的应用程序之间相互通信.最早出现在UNIX系统中,是UNIX系统主要的信息传递方式.在WINDOWS系统中,SOCKET称为WINSOC ...

  8. JDBC数据库连接JAVA和一些基本语句

    连接JDBC       1)JDBC简介         - JDBC就是Java中连接数据库方式         - 我们可以通过JDBC来执行SQL语句.       2)获取数据库连接     ...

  9. Java常用测试工具

    第一部分:九款性能测试 Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK——Java Development Kit(Java开发工具包),它自带有Java Runti ...

随机推荐

  1. day 69 orm操作之表关系,多对多,多对一(wusir总结官网的API)

    对象  关系  模型 wusir博客地址orm官网API总结 django官网orm-API orm概要: ORM 跨表查询 class Book(models.Model): title = mod ...

  2. OpenCV-Python 中文教程(搬运)目录

    OpenCV-Python 中文教程 OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译 说明:搬运自linux公社pdf文件,粗略搬运, ...

  3. HYSBZ 4034 【树链剖分】+【线段树 】

    <题目链接> 题目大意: 有一棵点数为 N 的树,以点 1 为根,且树点有权值.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...

  4. Python并发复习2 - 多线程模块threading

    一.多线程的调用 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更方便的a ...

  5. hash碰撞POC

    hash碰撞POC: 该类型漏洞POC编写过程难点有二: 一. hash碰撞数据的产生或收集 二. 使用responseTime来判断是否存在hash,如何精确的得到 三. 如何估算出服务器的处理/响 ...

  6. muduo学习笔记(六) 多线程的TcpServer

    目录 前言 多线程TcpServer EventLoopThreadPool 线程池设计模式 muduo中的使用 连接的建立.消息.销毁 on_connection on_message on_clo ...

  7. Jenkins环境搭建(5)-与Jmeter完成参数化构建和构建前删除操作

    此前介绍过几篇关于Jenkins配置相关的文章,今天再来说说参数化构建和构建前删除已有的报告.在实际测试过程中,是需要测试几套环境的,不使用参数化构建的话,构建脚本就比较麻烦了:自然,已生成的报告,不 ...

  8. thinkpad那些事儿

    之前玩过windows系统的acer笔记本,联想台式机,os系统的mac pro笔记本,最近刚接触windows系统的thinkpad笔记本,对它的键盘触感印象深刻,舒服.thinkpad,思考本,是 ...

  9. VBA调用DOS程序两种方法

    Set wsh = VBA.CreateObject("WScript.Shell") 'wsh.Run strExePath & " g", vbHi ...

  10. 前后端通过API交互

    前两篇已经写好了后端接口,和前段项目环境也搭建好了 现在要通过接口把数据展示在页面上 先占位置写架子 创建一个头部组件和底部组件占位置 <template> <h1>这是头部组 ...