Странная проблема с JDBC, select возвращает null - PullRequest
0 голосов
/ 24 мая 2009

Я пытаюсь использовать 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 ]

6 голосов
/ 24 мая 2009

Вы все еще не закрываете свои ресурсы должным образом. Это должно быть сделано в блоке finally:

http://www.java -blog.com / правильное закрывание-ресурсы JDBC-

3 голосов
/ 24 мая 2009

В качестве первого шага стоило бы убедиться, что исключение не выдается - по крайней мере, записать что-нибудь в ваш блок catch ().

Также стоит зарегистрировать сгенерированный SQL и убедиться, что он действительно возвращает то, что вы ожидаете от базы данных, при непосредственном ее запуске.

Если у вас есть несколько баз данных, стоит подтвердить, что вы работаете с той базой, о которой вы думаете - мне стыдно признаться, что меня так и застали.

2 голосов
/ 24 мая 2009

Моим первым предположением было бы то, что Integer.parseInt (num) может выдать исключение. Если это так, оператор SQL будет нарушен.

во-вторых, как указал Макач, есть несколько вопросов. первый всеобъемлющий

вы не должны использовать конкатенацию строк, как

      ....where msg_id = " + topicId;

а точнее

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

edit: кажется, это то, что вы пытались в любом случае, ТАК затягивает некоторых персонажей.

2 голосов
/ 24 мая 2009

несколько проблем с вашим кодом, я буду кратким:

не инкапсулируйте с try / catch на этом слое, особенно если вы не управляете ошибками. this.specificTopic выглядит глобально, поэтому, если ваш запрос не выполнен, он вернет все, что было сохранено в this.specificTopic.

также попробуй то, что сказал БоббиШафто. распечатайте в консоли или используйте ваш отладчик. Это должно дать вам хорошее представление о том, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...