【问题标题】:Tomcat, no data from Result set?Tomcat,结果集中没有数据?
【发布时间】:2012-02-12 00:18:12
【问题描述】:

我无法从我的 mySQL 数据库中获取任何信息。我正在向它传递一个应该返回单行的有效查询。但是它只返回 0,即 int results 的初始值

public String getResultSet(String query) throws SQLException{
            ResultSet rs = null;
            int results=0;
            try {
                con = ds.getConnection();
                Statement stmt = (Statement) con.createStatement();
                rs = stmt.executeQuery(query);

                    while(rs.next()){                   
                        results = rs.getInt("location_id");             
                    }           

                } catch (Exception ex ){               
            } finally {
                if (con != null) con.close();
            }           
            return Integer.toString(results);           
        }

没有抛出任何错误,有人能告诉我我做错了什么吗?

TIA

【问题讨论】:

  • 你试过用调试器看看你是否真的用 rs.next() 进入了while循环吗?
  • 您是否在数据库中运行查询并验证它是否返回结果?
  • 是的,查询是有效的,它确实进入了while循环。你认为代码看起来有效吗?

标签: java mysql apache tomcat jdbc


【解决方案1】:

看起来您有一个 Exception 的 catch 块,其主体为空。这将捕获并静默忽略任何 SQL 等异常。然后您将退出 try/catch,并返回 results ... 仍然为零。


您正在做的是“挤压”异常;即在不进行任何恢复或错误报告的情况下将其捕获并丢弃。这是不好的做法。更糟糕的是,您正在为Exception 这样做。这意味着您不仅要为您(可能)期望发生的已检查异常执行此操作,而且还要为您无法预料到的所有未检查异常执行此操作。

【讨论】:

  • 对捕获没有任何动作,仅此而已。我看不出这会如何影响 ResultSet?
  • @Eric Banderhide 如果抛出异常怎么办?如果你有一个空的 catch 子句,你甚至不会知道是否有问题。
  • 异常在Tomcat上打印到哪里,是Catalina.out吗?
  • 我添加了堆栈跟踪,去看了一下,它指出了错误。造成问题的是声明的演员表。
【解决方案2】:

没有抛出异常,因为您在没有打印它们的情况下捕获它们。如果有的话,你永远不会看到它们,因为你的 catch 块是空的。

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2018-02-19
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多