如何启动JDBC Debug模式,打印JDBC诊断日志

1.下载Debug版本jar包

     首先要下载一个Debug版本的JDBC jar包,Debug版本的jar包命名形式为jdbcX_g.jar(如下图所示),如Oracle11g的Debug版本的jar包为jdbc6_g.jar。点击这里下载:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html 

2.启动Logging模式

     第一种方式:设置运行环境变量java -Doracle.jdbc.Trace=true ...(elipse中run->run configurations->arguments一栏)

     第二种方式:在程序中控制(建议采用这种方式)

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
			String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
			ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
			ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
			mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
			System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
			

     如果用的是Oracle 10g,直接执行:

/**oracle 10g 启动方法*/
			oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
			oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging

3.配置log文件

jdbc使用的是java.util.logging包中的Logger对象打印log。

	/**配置log文件*/
			Handler fh = new FileHandler("./oracle_jdbc_log.log");
			fh.setLevel(Level.ALL);
			fh.setFormatter(new SimpleFormatter());
			Logger.getLogger("").addHandler(fh);
			Logger.getLogger("").setLevel(Level.ALL);

4.下面给大家一个完成的Demo

import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public void run() throws SQLException {
		DriverManager.registerDriver(new OracleDriver());
		//需在加载OracleDriver之后开启log
		enableOracleLogging();
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		try {
			conn = getConnection();
			System.out.println("Connection retrieved..");
			stmt = conn.createStatement();
			rset = stmt.executeQuery("select empno from emp");
			while (rset.next()) {
				System.out.println(rset.getInt(1));
			}
		} catch (SQLException sqle) {
			sqle.printStackTrace();
		} finally {
			if (rset != null) {
				rset.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		}
	}
public static void enableOracleLogging() {
		try {
			/** 配置log文件 */
			Handler fh = new FileHandler("./oracle_jdbc_log.log");
			fh.setLevel(Level.ALL);
			fh.setFormatter(new SimpleFormatter());
			Logger.getLogger("").addHandler(fh);
			Logger.getLogger("").setLevel(Level.ALL);
			/** oracle 11g 启动方法 */
			MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
			String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
			ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
			ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
			mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
			System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
			/** oracle 10g 启动方法 */
			// oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
			// oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
时间: 2025-01-21 12:22:56

如何启动JDBC Debug模式,打印JDBC诊断日志的相关文章

eclipse使用debug模式启动web服务报错

问题描述 eclipse使用debug模式启动web服务报错,使用run方式就正常.报错异常如下:SEVERE: Catalina.start: org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152)at org.apache.cata

debug模式-启动调试的时候F5 解决方案配置 也就是 Debug和Release 两种模式的区别?

问题描述 启动调试的时候F5 解决方案配置 也就是 Debug和Release 两种模式的区别? 怎么解释? 求高手告知 感激不尽! 解决方案 看不到图啊 这两种模式也就是编译选项不同.自己开发工程中用DEBUG模式,而产品发布是RELEASE版本. 另外有时DEBUG模式程序没有错,而release有错,有时会相反

tomcat-myeclipse部署项目后,debug模式启动,总是弹出Class.class文件

问题描述 myeclipse部署项目后,debug模式启动,总是弹出Class.class文件 myeclipse部署项目后,启动tomcat用debug模式启动是出现debug窗口,但是总是弹出Class.class文件,,,启动的时候也是卡在这里就不动了.. 解决方案 把.class窗口关掉就行了,应该是你debug窗口的按钮哪里不对 解决方案二: http://bbs.csdn.net/topics/390915517 解决方案三: 最简单的方法,换myeclipse 解决方案四: 你这m

tomcat debug模式启动失败

问题描述 tomcat debug模式启动失败 错误: ERROR: transport error 202: gethostbyname: unknown host ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/ws/

tomcat启动报错-Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'

问题描述 Cannot load JDBC driver class 'oracle.jdbc.OracleDriver' 以前写的代码没有问题,现在在新的机器上部署就报错: 2013-10-8 22:36:17 org.apache.catalina.core.StandardHostDeployer install 信息: Installing web application at context path /NetCTOSS_V3 from URL file:E:Tomcat 5.0web

tomcat-Eclipse中Tomcat能正常启动,但是在debug模式中不能正常启动。

问题描述 Eclipse中Tomcat能正常启动,但是在debug模式中不能正常启动. 解决方案 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问. 关闭eclipse里面的tomcat,在tomcat安装目录下双击startup.bat手动启动tomcat服务器.访问htt://localhost:8080/能正常访问tomcat管理页面. 症状原因: ?????? e.....

【sublime】sublime Text 3 javaScript代码自动提示插件&安装步骤 &启动Debug模式

最近使用sublime开发node.js,但是sublime的js代码在书写的时候并没有提示功能. 因此搜到资料,用于安装代码自动提示插件.   1.打开sublime,然后快捷键Ctrl+Shift+P,打开pacakges列表界面,搜索packages:install packages [注意]此处如果点击packages:install packages后,报下面这个错的话: 解决方法: 1.http://blog.csdn.net/freshlover/article/details/4

XCODE Debug模式资料整理_IOS

 在iOS开发中, 大多时候需要在debug 模式下调试,这里就整理下Debug 的知识  1,Debug和Release版本区别? 众所周知,我们进行iOS开发,在Xcode调试程序时,分为两种方式, Debug 和 Release ,在Target的Setting中相信大家应该看到很多选项都分为 Debug 和 Release ,方便我们分别设置,满足调试和发布的不同需求. Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 Debug是调试版本,Debug和Rel

vc++编程问题-vs2013里面debug模式下与外部用文件夹打开exe文件结果不同

问题描述 vs2013里面debug模式下与外部用文件夹打开exe文件结果不同 求教一个问题,我在用vs2013引用外部的sdk时候,在vs本身的调试模式下,就是点上方那个debug的时候,初始化sdk的时候.初始化失败了(我看返回值的原因是配置文件未找到),但是我在Debug文件夹下的exe文件却可以正常执行(初始化正常,之后执行的内容也正常).那么怎么使得debug模式下的初始化也能成功呢? 解决方案 检查你程序中读取文件的地方,你使用的相对路径是根据程序启动参数而不同的,导致打开的文件不同