0

Why do we have to throw the SQLException whilst creating a jdbc connection, what is the purpose of it? And what type of exception is it? checked, runtime, unchecked?

4

2 回答 2

1

SQLException 派生自 Exception 但不是RuntimeException,因此它是经过检查的。

在我看来,SQLException 异常是 JDBC 的一个弱点。它基本上意味着“某处出了点问题”——它只是针对任意数量的可能原因的一个异常类,您必须阅读原因 + 堆栈跟踪以确定是什么。

只是 SQLException 的一些可能原因:

  • 连接数据库失败,因为 URL 错误
  • 无法连接到数据库,因为数据库未在该端口上侦听
  • 由于数据库服务器未运行,无法连接到数据库
  • 无法连接到数据库,因为用户名/密码无效
  • SQL 语句中的语法错误
  • SQL 语句中的行/表不存在
  • 您忘记填写 Prepared Statement 中的所有参数
  • ResultSet 中的列索引超出范围
  • 月亮在错误的阶段

换句话说,有这么多不同原因的一个例外。尽管 SQL 异常是已检查异常(意味着它最终必须被捕获,您不能忽略它),但某些可能的原因最好通过未检查异常来解决,因为它们不会由于用户操作或错误配置而出现,仅作为程序员错误。(例如忘记为所有参数提供值,或者 ResultSet 中的列索引超出范围)。

你的问题是关于打开连接的,所以我的(不完整的)列表中的第一个原因在这里最相关。检查SQLException,这在打开连接时是合适的,因为数据库连接的可用性最终不在Java程序的控制范围内,因此程序必须处理无法打开连接的情况。在这种情况下,异常的目的是允许您编写处理这些情况的代码。

于 2013-09-01T15:52:28.777 回答
0

来自 OracleDocs:

每个 SQLException 提供几种信息:

  • 描述错误的字符串。这用作 Java 异常消息,可通过方法 getMesasge 获得。
  • 一个“SQLstate”字符串,它遵循 XOPEN SQLstate 约定或 SQL:2003 约定。SQLState
    字符串的值在相应的规范中进行了描述。DatabaseMetaData
    方法 getSQLStateType 可用于发现驱动程序
    返回 XOPEN 类型还是 SQL:2003 类型。
  • 特定于每个供应商的整数错误代码。通常这将是底层数据库返回的实际错误代码。
  • 到下一个异常的链。这可用于提供额外的错误信息。
  • 此 SQLException 的因果关系(如果有)。

更多信息可以在这里找到http://docs.oracle.com/javase/7/docs/api/java/sql/SQLException.html
和这里:http ://docs.oracle.com/javase/tutorial/jdbc /basics/sqlexception.html


也请下次在发布此类问题之前进行研究,在“GoogLe”中输入您想要的内容并不需要太多努力

于 2013-09-01T14:00:54.930 回答