在创建连接时抛出SQLException。

时间:2013-09-01 13:52:45

标签: java sql jdbc exception-handling

为什么我们必须在创建jdbc连接时抛出SQLException,它的目的是什么?它是什么类型的例外?检查,运行时,未检查?

2 个答案:

答案 0 :(得分:1)

SQLException派生自Exception但 RuntimeException,因此已检查

在我看来,SQLException异常是JDBC的一个弱点。它基本上意味着“某些地方出了问题” - 它只是一个可能原因的异常类,你必须阅读原因+堆栈跟踪以确定是什么。

SQLException的一些可能原因:

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

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

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

答案 1 :(得分:0)

来自OracleDocs:

  

每个SQLException都提供了几种信息:

     
      
  • 描述错误的字符串。这用作Java Exception消息,可通过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”中输入您想要的内容并不需要花费很多精力

相关问题