PreparedStatement не возвращает результат - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь использовать PreparedStatements в первый раз, но по какой-то причине я просто не могу заставить это работать.Тот же запрос, сделанный без использования PreparedStaement, работает нормально.

Простая рабочая версия:

        String artNum = "'" + artikelNummer.toLowerCase() + "'";
        String query =
                "SELECT a.artnr, a.bezeichnung, "
                + "(SELECT verfuegbar_bestand "
                + "FROM getbestand(a.uid)) AS bestand_verfuegbar "
                + "FROM article AS a "
                + "WHERE lower(a.artnr) = " + artNum;
        ResultSet results = statement.executeQuery(query);

Версия PreparedStatement:

        String artNum = "'" + artikelNummer.toLowerCase() + "'";
        String query = 
                "SELECT a.artnr, a.bezeichnung, "
                + "(SELECT verfuegbar_bestand "
                + "FROM getbestand(a.uid)) AS bestand_verfuegbar "
                + "FROM article AS a "
                + "WHERE lower(a.artnr) = ? ";
        prepStatement = con.prepareStatement(query);
        prepStatement.setString(1, artNum);
        ResultSet results = prepStatement.executeQuery();

Любая помощь / идеи будуточень хорошо принят.

Ps Да, artNum - это строка, а не int, например, A1110

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Если вы используете PreparedStatements, вам не нужно заключать строку в кавычки следующим образом:

String artNum = "'" + artikelNummer.toLowerCase() + "'"

Это должно быть:

String artNum = artikelNummer.toLowerCase();
1 голос
/ 12 декабря 2011

Вы по-прежнему цитируете номер статьи - вам больше не нужно это делать, потому что вы передаете значение напрямую, используя параметры. Просто используйте:

String query = 
        "SELECT a.artnr, a.bezeichnung, "
        + "(SELECT verfuegbar_bestand FROM getbestand(a.uid))"
        + " AS bestand_verfuegbar "
        + "FROM article AS a "
        + "WHERE lower(a.artnr) = ?";
prepStatement = con.prepareStatement(query);
prepStatement.setString(1, artikelNummer.toLowerCase());
ResultSet results = prepStatement.executeQuery();

(две строки в нижнем регистре для выполнения запроса без учета регистра обычно не очень хорошая идея, но это отдельная проблема.)

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