SQLException: ORA-01008: не все переменные связаны - ошибка SQL с использованием Java для запроса базы данных JDBC

1
        Statement stmt = con.createStatement();

        String pubBooks = "select title_name " +
                "from publisher, title " +
                "where pub_name = ? " +
                "and publisher.pub_no = title.pub_no " +
                "order by title_name";
        ResultSet rS = stmt.executeQuery(pubBooks);
        stmt.close();
        String pubss = "Irwin";
        PreparedStatement pStmt = 
            con.prepareStatement(pubBooks);
        pStmt.setString(1, pubss);
        pStmt.executeUpdate();

Эй, я пытаюсь использовать JDBC для запроса моей базы данных к списку названий книг, созданных этим издателем, однако я столкнулся с ошибкой java.sql.SQLException: ORA-01008: не все связанные переменные. Я пытаюсь все, о чем я могу думать, но я просто не совсем уверен, что делать в этот момент.

Теги:
jdbc

2 ответа

3
Лучший ответ

Вы были близки к попытке PreparedStatement, за исключением того, что вы просто вызвали неправильный метод "выполнить". Используйте executeQuery() чтобы вернуть ResultSet.

PreparedStatement pStmt = 
con.prepareStatement(pubBooks);
pStmt.setString(1, pubss);
ResultSet rS = pStmt.executeQuery();
  • 0
    Аааа, хороший улов! Эта же ошибка все еще остается на однако :(
  • 0
    Вам не нужно ваше Statement вообще, только ваше PreparedStatement .
Показать ещё 1 комментарий
1

Заявление не может использоваться при поставке параметров для запроса, используйте PreparedStatement. Возможно, вам придется пересмотреть свой код, как показано ниже:

    String pubBooks = "select title_name " +
            "from publisher, title " +
            "where pub_name = ? " +
            "and publisher.pub_no = title.pub_no " +
            "order by title_name";

    String pubss = "Irwin";

    PreparedStatement pStmt =  con.prepareStatement(pubBooks);
    pStmt.setString(1, pubss);
    ResultSet rS = pStmt.executeQuery();

    //TODO: code to use resultset rS

    rS.close();
    pstmt.close();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню