我正在尝试使用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;
然后结果集没有重新调整.... 我在这里搞砸了,仍然无法弄清楚是什么问题
答案 0 :(得分:6)
您仍未正确关闭资源。这应该在finally块中完成:
答案 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)
编辑:看起来这就是你正在尝试的东西,所以对某些角色很糟糕。