测试 的目的。
下面将对 JdbcProxy 提供的每个功能做详细的介绍。
记录方便开发人员和测试人员阅读的 JDBC 调用过程
JdbcProxy 可以跟踪 JDBC 调用过程,生成方便开发人员和测试人员阅读的文 件格式。在普通的数据库调用中,如果开发人员和测试人员想了解 JDBC 的调用 过程,或者需要完整的查看某个 SQL 语句,则需要手工将这些信息打印出来或者 记录在日志中。 JdbcProxy 的这个功能就像为 JDBC 的调用过程自动记录了一个 日志,开发人员和测试人员可以从日志中获得被调用的每一个方法,以及调用方 法的参数和返回值。这样便于开发人员和测试人员发现由于 SQL 语句拼写错误而 导致的数据库访问失败,或是由于数据库中没有数据而导致的空指针异常,使应 用程序的数据库访问过程更加直观。可以根据清单 1中的示例代码生成 JDBC 调 用过程。
清单 1
import java.sql.Statement;
public class JdbcProxyDemo {
public static void main(String args[]) throws Exception {
String driver = "nl.griffelservices.proxy.jdbc.oracle.StubTracerDriver";
String url = "jdbc:tracer::COM.ibm.db2.jdbc.app.DB2Driver:jdbc:db2:SAMPLE";
Class.forName(driver);
Connection connection = DriverManager.getConnection (url);
Statement stmt = connection.createStatement();
stmt.executeUpdate("DELETE FROM greetings WHERE greeting=''Good Night''");//delete
stmt.executeUpdate("INSERT INTO greetings VALUES(''Good Evening'')"); //insert
stmt.executeUpdate("UPDATE greetings SET greeting = ''Good Night''
WHERE greeting = ''Good Evening''"); //update
ResultSet rs = stmt.executeQuery("SELECT * FROM greetings");//select
while (rs.next()) {
System.out.println(rs.getString("greeting"));
}
rs.close();
stmt.close();
connection.close();
}
}
使用JdbcProxy测试Java应用程序(2)
时间:2011-05-25 IBM 郑溪龙
与普通数据库调用不同,清单 1中示例程序中所需的数据库驱动是 JdbcProxy 提供的StubTracerDriver,URL 的结构如下:
jdbc:tracer:<filename>:<driver>:<url>
其中:
<filename> 是保存结果的文件名;如果为空,结果会被输出到控制台 。
<driver> 是数据库驱动名,该示例程序使用的是 db2 的驱动。
<url> 是数据源的 URL,该示例程序使用 jdbc:db2:SAMPLE,不需要用 户名和密码。
运行上述程序得到清单 2的记录结果:
清单 2
//记录调用 getConnection 方法java.sql.Driver.connect (jdbc:db2:SAMPLE, {}) returns
DB2Connection
{
connectionHandle = 1
SPConnected = false
source = SAMPLE
user =
conArgs =
closed = false
describeCached = false
describeParam = true
isReadOnly = false
autoClose = false
LONGDATA compat = false
}
//记录建立的 Connection 对象
java.sql.Connection.<init>(
DB2Connection
{
connectionHandle = 1
SPConnected = false
source = SAMPLE
user =
conArgs =
closed = false
describeCached = false
describeParam = true
isReadOnly = false
autoClose = false
LONGDATA compat = false
}
)
//记录调用 createStatement
|