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