我对这段代码有疑问。当我传递用户并将参数传递给isLogin功能时,它将引发ORA-01008错误。我已使用jdbc连接到Oracle数据库。
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;
}
}
我在Controller类中使用此功能
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查询只是为了打印表时,一切都很好。
答案 0 :(得分:3)
您不应再次指定SQL查询。已经指定。更改行:
rs = stmt.executeQuery(sql); // method from java.sql.Statement
收件人:
rs = stmt.executeQuery(); // method from java.sql.PreparedStatement
第一种方法不考虑参数,而是按原样运行SQL ...,因此您会遇到所提到的错误。