[Java] zjdbcping:JDBC數據庫連接測試工具


作者: 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM