Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建连接时引发SQLException。_Java_Sql_Jdbc_Exception Handling - Fatal编程技术网

Java 创建连接时引发SQLException。

Java 创建连接时引发SQLException。,java,sql,jdbc,exception-handling,Java,Sql,Jdbc,Exception Handling,为什么在创建jdbc连接时必须抛出SQLException,其目的是什么?这是什么类型的例外?选中、运行时、未选中?来自OracleDocs: 每个SQLException都提供几种类型的信息: 描述错误的字符串。这被用作Java异常消息,可通过getMesasge方法获得 “SQLstate”字符串,遵循XOPEN SQLstate约定或SQL:2003约定。SQLState的值 字符串在适当的规范中进行了描述。数据库元数据 方法getSQLStateType可用于发现驱动程序是否 返回XO

为什么在创建jdbc连接时必须抛出SQLException,其目的是什么?这是什么类型的例外?选中、运行时、未选中?

来自OracleDocs:

每个SQLException都提供几种类型的信息:

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



另外,请下次在发布此类问题之前进行研究,在“GoogLe”中键入您想要的内容不需要花费太多精力。

SQLException派生自Exception,但不是RuntimeException,因此选中了它

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

只是SQLException的一些可能原因:

  • 无法连接到数据库,因为URL错误
  • 无法连接到数据库,因为数据库未在该端口上侦听
  • 无法连接到数据库,因为数据库服务器未运行
  • 无法连接到数据库,因为用户名/密码无效
  • SQL语句中的语法错误
  • SQL语句中的行/表不存在
  • 您忘记了在准备好的语句中填写所有参数
  • 结果集中的列索引超出范围
  • 月球处于错误的相位
换言之,有这么多不同原因的一个例外。尽管SQL异常是一个已检查的异常(这意味着它最终必须被捕获,您不能忽略它),但一些可能的原因最好通过未检查的异常来解决,因为它们不会因为用户操作或错误配置而出现,而仅仅是程序员错误。(例如,忘记为所有参数提供值,或结果集中的列索引超出范围)


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

您检查了javadoc吗?我认为这是重复的。您检查了吗:虽然我承认您已经回答了问题,但我不同意有时给出的“google it”建议。谷歌将抓取这个问题和答案,这个页面将显示在谷歌搜索结果中。我曾在很多场合用谷歌搜索过一些东西,发现无数与我类似的问题,答案只说“谷歌it”。没用。@NickJ好吧,这完全取决于人。真的,我更喜欢在问问题之前做研究,。但在提出问题之前,上网总是值得一看的,因为它产生的垃圾更少,而且它能更好地理解问题,而且可能的解决办法是在线搜索不会产生更多的垃圾。诸如“谷歌it”之类的懒散答案会污染搜索结果,使研究更加困难。正确的答案将添加到有用的搜索结果中,从而使未来的搜索更加容易。对那些不努力的人(或者那些根本没有找到他们需要的确切搜索词的人)感到恼火是可以理解的,但是如果人们不想提供正确的答案,他们应该什么也不说。没有人批评你——你回答得很正确。