Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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 如何修复Catch语句中的SQLException?_Java_Swing_Postgresql_Intellij Idea - Fatal编程技术网

Java 如何修复Catch语句中的SQLException?

Java 如何修复Catch语句中的SQLException?,java,swing,postgresql,intellij-idea,Java,Swing,Postgresql,Intellij Idea,这个程序是关于自动完成的。当我在文本字段中键入内容时,将显示建议列表 当我在textfield中键入内容时,我使用方法onWordUpdated()获取数据库中的建议列表 现在,问题是我有这个错误: exception java.sql.SQLException is never thrown in body of corresponding try statement 我在代码中做了一个注释,以便您知道哪一行 有人能帮我修一下吗 谢谢 我有以下代码: public void onWordUp

这个程序是关于自动完成的。当我在
文本字段
中键入内容时,将显示建议列表

当我在
textfield
中键入内容时,我使用方法
onWordUpdated()
获取数据库中的建议列表

现在,问题是我有这个错误:

exception java.sql.SQLException is never thrown in body of corresponding try statement
我在代码中做了一个注释,以便您知道哪一行

有人能帮我修一下吗

谢谢

我有以下代码:

public void onWordUpdated(final String toComplete)
  {
    new Thread(new Runnable()
    {
      public void run()
      {
        try
        {
          final List<Suggestion> suggestions = suggestor.getSuggestions(toComplete);
          SwingUtilities.invokeLater(new Runnable()
          {
            public void run()
            {
              try
              {
                suggestionWidgetModel.clear();
                for (Suggestion suggestion : suggestions)
                  suggestionWidgetModel.addElement(suggestion.getCaption());
                if (!suggestions.isEmpty())
                  suggestionWidget.setSelectedIndex(0);
              }
              catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
              {
                e.printStackTrace();
              }
            }
          });
        }
        catch (SQLException e1)
        {
          onSqlError(e1);
        }
      }
    }, "onWordUpdated").start();
  }
public void onWordUpdated(最终字符串完成)
{
新线程(newrunnable())
{
公开募捐
{
尝试
{
最终列表建议=Suggester.getSuggestions(toComplete);
SwingUtilities.invokeLater(新的Runnable()
{
公开募捐
{
尝试
{
suggestionWidgetModel.clear();
(建议:建议)
suggestionWidgetModel.addElement(suggestion.getCaption());
如果(!suggestions.isEmpty())
suggestionWidget.setSelectedIndex(0);
}
catch(SQLException e)//这一行是我的问题,有人能帮我解决吗?谢谢。。
{
e、 printStackTrace();
}
}
});
}
捕获(SQLException e1)
{
onSqlError(e1);
}
}
},“onWordUpdated”).start();
}
Java有两种类型的异常:未选中(从
运行时异常
错误继承的异常)和选中(从
异常
继承的所有其他异常)

选中的异常具有以下属性:

  • 如果一个代码块抛出一个异常,那么它必须被捕获到catch块中,或者该方法必须声明它可能抛出该类型的
    异常
  • 如果某些代码调用的方法
    抛出某些异常
    ,则该代码也必须在try-catch中,或者其方法还必须指定
    抛出某些异常
由于前两个检查,编译器可以检测是否可以在特定代码块中实际抛出已检查的异常。因此,这导致了第三个属性:

  • 如果try-catch块的catch子句声明了在
    try
    块中不能出现的
    异常
    类型,则生成编译错误。编译器这样做主要是为了告诉您犯了一个错误:您正在处理一个永远不会抛出的异常
是已检查的异常,因此它受这些规则的约束。下面try块中的所有代码行(或它们调用的方法)都不能抛出
SQLException
,因此编译器会通过编译错误告诉您

try {
    suggestionWidgetModel.clear();
    for (Suggestion suggestion : suggestions)
        suggestionWidgetModel.addElement(suggestion.getCaption());
    if (!suggestions.isEmpty())
        suggestionWidget.setSelectedIndex(0);
}
catch (SQLException e) // This line is my problem, Could someone help me how to fix this? Thanks.. 
{
    e.printStackTrace();
}

编译器只是告诉您,此时不需要捕获该异常

SQLException
是一个选中的异常,这意味着只有在显式抛出它或调用在其
throws
子句中声明它的方法时,代码才应该看到它。对于特定try/catch块中的代码,这两种情况都不正确

您应该能够摆脱内部的try/catch块,可能还有外部的try/catch块



IIRC,理论上可以看到未声明的已检查异常,但除非您采取特殊步骤使其发生,否则不太可能出现这种情况。

请使用代码进行说明。很难理解代码与问题无关的问题以及隐藏在注释中的问题。SQLException说明了什么?问题到底是什么?您希望您的代码做什么,它实际上在做什么?若它抛出了一个你们不期望的异常,你们能提供更多关于它所说的内容的信息吗?异常java.sql.SQLException永远不会在相应的try主体中抛出statement@Arpit-这是个糟糕的建议。捕获异常几乎总是一个错误。当我试图删除try/catch块时,出现了一个错误,上面写着:线程“main”java.lang.ClassNotFoundException:org.postgresql.drivers中的异常这是另一个问题。您的类路径上没有Postgres驱动程序。@Stephen-“理论上可以看到未声明的已检查异常”-我对此很好奇。你能解释一下或者链接到一个详细的讨论吗?@Kublai:滥用泛型可以抛出一个检查过的异常。它基本上归结为创建一个泛型方法,该方法接受并抛出异常,但将throws子句基于类型参数(这是合法的),并对类型参数执行未经检查的强制转换。然后调用函数,如
MyLibrary.uncheckedThrow(newioexception())
。这里有一个简明的例子:@Mark-有趣。谢谢你的解释!当我试图删除try/catch块时,出现了一个错误,上面写着:线程“main”java.lang.ClassNotFoundException:org.postgresql.Driver中的异常