分析SQL异常
每个SQLException都有一个由多个SQLException对象构成的链,这些对象可以通过getNextException方法获取。我们需要用两个嵌套的循环来完全枚举所有的异常。
幸好,java 6改进了SQLException类,让其实现了Iterable< Throwable>接口,其iterator方法可以产生一个Iterator< Throwable>对象,这个迭代器可以迭代这两个链,首先迭代SQLException成因链,然后迭代下一个SQLException。我们可以使用下面的代码
1 | for(Throwable t : sqlException){ |
可以在SQLException上调用getSQLState和getErrorCode方法来进一步分析它。
数据库驱动程序可以将非致命的错误作为警告报告,我们可以从连接、语句和结果集中取出这些警告。SQLWarning类是SQLException的子类(尽管它不会被当作异常抛出)。警告也是串成链的,我们可以调用getSQLState和getErrorCode来获取有关警告的更多信息:
1 | SQLWarning w=stat.getWarning(); |
当数据从数据库中读出并发生意外被截断时,SQLWarning的DataTruncation子类就派上用场了,如果截断发生在更新语句中,那么DataTruncation将会被当作异常抛出。
组装数据库
- 连接数据库
- 使用sql命令打开文件
- 使用通用的execute方法执行每条命令。如果它返回true,则说明该命令产生了一个结果集。
- 如果产生了结果集,则打印结果。因为这是一个通用方法执行的结果,我们需要使用元数据来确定该结果的列数。
- 如果运行过程出现了异常,则打印这个异常链
- 关闭数据库连接
示例程序如下
1 | import java.io.*; |