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?
2 回答
SQLException 派生自 Exception 但不是RuntimeException,因此它是经过检查的。
在我看来,SQLException 异常是 JDBC 的一个弱点。它基本上意味着“某处出了点问题”——它只是针对任意数量的可能原因的一个异常类,您必须阅读原因 + 堆栈跟踪以确定是什么。
只是 SQLException 的一些可能原因:
- 连接数据库失败,因为 URL 错误
- 无法连接到数据库,因为数据库未在该端口上侦听
- 由于数据库服务器未运行,无法连接到数据库
- 无法连接到数据库,因为用户名/密码无效
- SQL 语句中的语法错误
- SQL 语句中的行/表不存在
- 您忘记填写 Prepared Statement 中的所有参数
- ResultSet 中的列索引超出范围
- 月亮在错误的阶段
换句话说,有这么多不同原因的一个例外。尽管 SQL 异常是已检查异常(意味着它最终必须被捕获,您不能忽略它),但某些可能的原因最好通过未检查异常来解决,因为它们不会由于用户操作或错误配置而出现,仅作为程序员错误。(例如忘记为所有参数提供值,或者 ResultSet 中的列索引超出范围)。
你的问题是关于打开连接的,所以我的(不完整的)列表中的第一个原因在这里最相关。检查SQLException,这在打开连接时是合适的,因为数据库连接的可用性最终不在Java程序的控制范围内,因此程序必须处理无法打开连接的情况。在这种情况下,异常的目的是允许您编写处理这些情况的代码。
来自 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”中输入您想要的内容并不需要太多努力