• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

使用java的JDBC Debug模式,来打印JDBC诊断日志

武飞扬头像
Heaven-Wang
帮助178

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();
		}
	}


这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanffaik
系列文章
更多 icon
同类精品
更多 icon
继续加载