DB2 9 运用垦荒(733 查验)认证指南,第 7 部门: Java 编程(6)

developerWorks








阻挠拂拭

概述

在本末节中,将进修若何利用 JDBC 运用递次可用的阻挠拂拭器材。我们将接头以下主题:

  • 利用 SQLException 对象举办根本的错误措置赏罚和告诉
  • 利用 JDBC 跟踪功用
  • 利用 JDBC 错误日志


错误措置赏罚

为了在 Java 递次中举办切确的错误措置赏罚,应该将逻辑困绕在 JDBC 运用递次中的 try/catch 块中。当 JDBC 方式中呈现错误时,它们将抛出 SQLException 对象。因而,关于每个包含 JDBC 操纵的 try 块,响应的 catch 块应该包含用来措置赏罚 SQLException 对象的逻辑。

下列示例提醒了在 WHERE 子句中带有类型不兼容的操纵数的 SELECT 语句:STAFF 表的 JOB 列为 VARCHAR 数据类型,而不是 INTEGER

try {
...
rs = stmt.executeQuery("SELECT ID, NAME FROM STAFF WHERE JOB = 99");
...
}
catch(SQLException sqlEx) {
  while(sqlEx != null) {
    System.err.println("SQLException information");
    System.err.println("Error msg: "   sqlEx.getMessage());
    System.err.println("SQLSTATE: "   sqlEx.getSQLState());
    System.err.println("Error code: "   sqlEx.getErrorCode());
    sqlEx=sqlEx.getNextException();
  }
}


catch 块包含一个 while 循环,这将有助于措置赏罚多个非常。在这个循环的末尾,挪用了 SQLException.getNextException() 方式,假如有另一个非常要捕获,该方式将前往非常;假如不存在更多的非常,该方式就将前往空值。

带有不兼容操纵数的 SELECT 语句将天生下列非常:

SQLException information
Error msg: DB2 SQL error: SQLCODE: -401, SQLSTATE: 42818, SQLERRMC: =
SQLSTATE: 42818
Error code: -401
SQLException information
Error msg: DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-401;42818;=
SQLSTATE: 56098
Error code: -727


依据您所利用的 JDBC 驱动递次,输入能够不一样。以上输入是由运用递次利用 IBM DB2 通用 JDBC 和 SQLJ 驱动递次天生的。

本教程中提醒的全部齐备示例代码都包含了措置赏罚 SQLException 对象的逻辑。





回页首



IBM DB2 通用 JDBC 和 SQLJ 驱动递次跟踪功用

为了调试 JDBC 和 SQLJ 运用递次,可以利用 IBM DB2 通用 JDBC 和 SQLJ 驱动递次的跟踪功用。搜集跟踪数据的保举方式是,经过编纂 IBM DB2 通用 JDBC 和 SQLJ 驱动递次的设置属性文件,在运用递次之外激活跟踪功用。但是,也可以在运用递次中激活跟踪功用。可以经过在加载驱动递次时指定跟踪选项,从而在运用递次运转时代启用跟踪功用;也可以在运用递次的分例如部门显式地挪用跟踪方式,从而翻开和关闭跟踪。

为了在运用递次之外利用 IBM DB2 通用 JDBC 和 SQLJ 驱动递次的跟踪功用,要在属性文件中添加下列代码行:

db2.jcc.traceDirectory=Trace
db2.jcc.traceFile=extTrace
db2.jcc.traceFileAppend=true


关于本教程,这些代码行添加在 tut-trace.properties 文件中,这个文件位于被测试的类文件地点的目录中。traceDirectory 属性示意,全部跟踪文件将写入 trace 子目录。这个目录必需存在,手腕写入跟踪文件。经过在 java 敕令中指定 tut-trace.properties 属性文件,跟踪功用可以搜集关于 ConnDb 类的信息。

java -Ddb2.jcc.propertiesFile=tut-trace.properties ConnDb


为了在运用递次中启用跟踪,可以在树立数据库毗邻所用的 url 参数背面附加跟踪属性。譬喻:

String url = 
     "jdbc:db2:sample:traceFile=Trace/intTrace.txt;traceLevel="  
     (com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS |
     com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTS)   ";";


在这个示例中,跟踪信息写入 Trace 子目录中的 intTrace.txt 文件中。

为了在利用 DriverManager 的运用递次中翻开和关闭跟踪,可以在树立数据库毗邻所用的 url 参数中指定 traceLevel,并在 DriverManager.setLogWriter 方式中指定文件名和途径。譬喻:

...
String url = 
     "jdbc:db2:sample:traceLevel="  
     (com.ibm.db2.jcc.DB2BaseDataSource.TRACE_DRDA_FLOWS |
     com.ibm.db2.jcc.DB2BaseDataSource.TRACE_CONNECTS)   ";";
...
//turn on trace
((com.ibm.db2.jcc.DB2Connection) con).setJccLogWriter(printWriter, 
      com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL);
...
//database activity
...
//turn off trace
((com.ibm.db2.jcc.DB2Connection) con).setJccLogWriter(null);







回页首



机能看管

IBM DB2 通用 JDBC 和 SQLJ 驱动递次包含一个 DB2SystemMonitor 接口,可以用它搜集以下这些关于运用递次的信息:

  • 中心驱动递次时间(Core driver time):受看管的 API 所经历的时间的总和
  • 搜集输入/输收时间(Network I/O time):搜集输入/输收时间的总和。
  • 处事器时间(Server time):告诉的全部 DB2 处事器经历的时间的总和。
  • 运用递次时间(Application time):运用递次、JDBC 驱动递次、搜集输入/输入和 DB2 处事器经历的时间的总和。
这些时间信息都因而毫秒为单元的。


以下代码演示若何确立 DB2SystemMonitor 接口,并搜集和取得关于运用递次的看管数据:

...
com.ibm.db2.jcc.DB2SystemMonitor systemMonitor =
     ((com.ibm.db2.jcc.DB2Connection)con).getDB2SystemMonitor();
systemMonitor.enable(true);
//reset all counters
systemMonitor.start(com.ibm.db2.jcc.DB2SystemMonitor.RESET_TIMES);
...
//database activity
...
systemMonitor.stop();
System.out.println("Server elapsed time = "   systemMonitor.getServerTimeMicros());





版权声明: 原创作品,赞成转载,转载时请务必以超链接体例标明文章 原始情由 、作者信息和本声明。否则将清查法则责任。

posted @ 2011-03-06 23:46  蓝色的天空III  阅读(476)  评论(0编辑  收藏  举报