DB2 9 运用垦荒(733 查验)认证指南,第 7 部门: Java 编程(6)
![]()
阻挠拂拭
概述
在本末节中,将进修若何利用 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());
版权声明: 原创作品,赞成转载,转载时请务必以超链接体例标明文章 原始情由 、作者信息和本声明。否则将清查法则责任。

浙公网安备 33010602011771号