Как исправить ORA-01008: Не все переменные связаны - PullRequest
0 голосов
/ 08 июня 2019

У меня проблема с этим фрагментом кода. Когда я передаю user и передаю аргументы функции isLogin, она выдает ошибку ORA-01008. Я подключен к базе данных Oracle с использованием JDBC.


 public boolean isLogin(Connection conn, String user, String pass) throws SQLException{
   String sql = "SELECT * FROM PRACOWNIK WHERE imie =? AND nazwisko =? ";
        PreparedStatement stmt;
        ResultSet rs;

        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, user);
            stmt.setString(2, pass);
            rs = stmt.executeQuery(sql);

            if(rs.next()){
                return true;
            }
            else {
                return false;
            }


        } catch (SQLException e){
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Error ");
            alert.setContentText(e.getMessage());
            alert.showAndWait();
            return false;
        }

    }

Я использую эту функцию в классе контроллера

public class Controller implements Initializable{

    public Pracownik pracownik = new Pracownik();

    @FXML
    private Label isConnected;

    @FXML
    private TextField txtUsername;

    @FXML
    private TextField txtPass;

    private Connection conn;

   // private ObservableList<Pracownik> lista = FXCollections.observableArrayList();

    public void initialize(URL url, ResourceBundle rb){
        conn = DBConnection.getConnection();

     //   lista = new Pracownik().getAll(conn);
    }

    public void login(ActionEvent event){
        try {
            if(pracownik.isLogin(conn, txtUsername.getText(), txtPass.getText())){
            isConnected.setText("Correct");
            }
            else{
             isConnected.setText("False");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

А это сообщение об ошибке

Caused by: Error : 1008, Position : 0, Sql = SELECT pesel FROM PRACOWNIK WHERE imie =:1  AND nazwisko =:2  , OriginalSql = SELECT pesel FROM PRACOWNIK WHERE imie =? AND nazwisko =? , Error Msg = ORA-01008: not all variables bound

Когда я использую обычный запрос Select только для печати таблицы, все в порядке.

1 Ответ

3 голосов
/ 08 июня 2019

Вы НЕ должны указывать запрос SQL снова.Это уже указано.Измените строку:

rs = stmt.executeQuery(sql); // method from java.sql.Statement

на:

rs = stmt.executeQuery(); // method from java.sql.PreparedStatement

Первый метод не учитывает параметры и запускает SQL "как есть" ... и поэтому вы получаете ошибкуВы упоминаете.

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