JDBC存在奇怪的问题,select返回null

时间:2009-05-24 10:24:35

标签: java jsp jdbc

我正在尝试使用JDBC,我的查询在某些情况下正在工作,但在其他情况下无效。 我真的很感激任何帮助。

我的一些代码:

public Result getSpecificTopic()
    {
        String query = "Select msg_body, msg_author from lawers_topic_msg";// where msg_id=2 order by msg_id desc";
         try
        {
            con = mysql.getConnection();
            //Statement stmt = con.createStatement();
            PreparedStatement stmt = con.prepareStatement(query);
            //stmt.setInt(1, topicId);
            ResultSet rs = stmt.executeQuery(query);
            int rowCount = rs.getRow();
            specificTopic = ResultSupport.toResult(rs);

            con.close();
            stmt.close();
        }
        catch(Exception e)
        {
        }
        return this.specificTopic;
    }

    public void setTopicId(String num)
    {
        this.topicId = Integer.parseInt(num);
    }

    public int getTopicId()
    {
        return this.topicId;
    }

但是,如果我改变

String query = "Select msg_body, msg_author from lawers_topic_msg";

String query = "Select msg_body, msg_author from lawers_topic_msg where msg_id = " + topicId; 

然后结果集没有重新调整.... 我在这里搞砸了,仍然无法弄清楚是什么问题

4 个答案:

答案 0 :(得分:6)

您仍未正确关闭资源。这应该在finally块中完成:

http://www.java-blog.com/correct-closing-jdbc-resources

答案 1 :(得分:3)

作为第一步,确保不抛出异常是值得的 - 至少记录catch()块中的内容。

同样值得记录生成的SQL,并确保在直接运行时实际返回您对数据库的期望。

如果您有多个数据库,那么确定您正在与您认为的那个数据库竞争是值得的 - 我很尴尬地承认我之前已经被这样做了。

答案 2 :(得分:2)

您的代码有几个问题,我会简短地说明一下:

不要在此层使用try / catch进行封装,特别是因为您没有进行错误管理。 this.specificTopic看起来是全局的,所以如果你的查询失败,它将返回存储在this.specificTopic中的内容。

也尝试BobbyShaftoe说的话。在控制台中打印或使用调试器。这应该可以很好地指出错误。

答案 3 :(得分:2)

我的第一个猜测是Integer.parseInt(num)可能抛出异常。如果是这样,sql语句将被破坏。

其次,正如马克奇指出的那样,有几个问题。首先是全能的

你不应该使用字符串连接,比如

      ....where msg_id = " + topicId;

而是

      ....where msg_id = ?"
         stmt.set Int(1,topicId)

编辑:看起来这就是你正在尝试的东西,所以对某些角色很糟糕。