Zacząłem zabawę z JavąFX i próbuje połączyć się z bazą danych - tutaj jest sukces, wygląda na to że wszystko działa (kontrolka Label wyświetla "Connected"). Problem pojawia się gdy wpisuje username i password, kontrolka powinna zmienić się na "Correct" po wpisaniu poprawnych danych, niestety zamiast tego wywala "Not correct". Niżej kod.
public class SqlConnection {
public static Connection Connector() {
try{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:employeeDB.sqlite");
return conn;
} catch (Exception e){
System.out.println(e);
return null;
}
}
}
Klasa odpowiedzialna za połączenie z bazą
public class Model {
Connection connection;
public Model(){
connection = SqlConnection.Connector();
if (connection == null){
System.exit(1);
}
}
public boolean isDbConnected(){
try{
return !connection.isClosed();
} catch (SQLException e){
e.printStackTrace();
return false;
}
}
public boolean isLogin(String user, String pass) throws SQLException {
PreparedStatement pst = null;
ResultSet rs = null;
try{
String query = "select * from employee where username=? and password=?";
pst = connection.prepareStatement(query);
pst.setString(0, user);
pst.setString(1, pass);
rs = pst.executeQuery();
if(rs.next()){
return true;
} else {
return false;
}
}catch(Exception e){
return false;
}finally {
if (pst != null) {
pst.close();
}
if (rs != null) {
rs.close();
}
}
}
}
klasa Model, z metodą isLogin która wysyła zapytanie do bazy
public class Controller implements Initializable {
public Model login = new Model();
@FXML
private Label isConnected;
@FXML
private TextField txtUserName;
@FXML
private TextField txtPassword;
@Override
public void initialize(URL location, ResourceBundle resources) {
if(login.isDbConnected()){
isConnected.setText("Connected");
} else isConnected.setText("Not Connected");
}
public void login (ActionEvent event)
{
try {
if(login.isLogin(txtUserName.getText(), txtPassword.getText())) {
isConnected.setText("Correct");
} else {
isConnected.setText("Not correct");
}
} catch (SQLException e) {
isConnected.setText("Not Correct");
e.printStackTrace();
}
}
no i controller, który po wywołaniu metody isLogin powinien zwrócić "Correct" jeżeli hasło i login zgadzają się z tymi w bazie, niestety niezależnie co wpiszę - po kliknięciu przycisku (button ma przypisaną metodę login z powyższej klasy) i tak wyświetla się "Not correct".
edit#
po debugowaniu programu zauważyłem, że w pewnym momencie wyskakuje SQLException z dopiskiem "no such table: employee". Z tym, że taka tabela istnieje w bazie...