2017-02-20 11 views
0

Ich brauche Hilfe, ich versuche etwas in die vorhandene Datenbank einzufügen, aber ich kann es nicht schaffen. Ich bekomme Die Datenbankdatei ist gesperrt (Datenbank ist gesperrt). Ich habe versucht, das vorbereitete Statement zu schließen, aber kein Glück. Ich habe stattdessen executeUpdate() verwendet executeQuery(), keine Hilfe.SQLite ist beschäftigt, Datenbank ist gesperrt

public class tableController { 
Connection connection; 

@FXML 
private TextField txtId; 

@FXML 
private TextField txtName; 

@FXML 
private TextField txtLastName; 

@FXML 
private TextField txtAge; 

@FXML 
private TextField txtUsername; 

@FXML 
private TextField txtPassword; 

@FXML 
private Button save; 


public tableController() { 
    connection = SQLiteConnection.connector(); 
    if(connection == null) { 
     System.out.println("Test"); 
     System.exit(1); 
    } 
} 

public boolean isDBConnected() { 
    try { 
     return !connection.isClosed(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return false; 
    } 
} 

public void Insert(ActionEvent event) throws SQLException { 

    PreparedStatement preparedStatement = null; 
    ResultSet resultSet; 
    String query = "insert into employee (id, name, lastName, age, username, password) values (?,?,?,?,?,?)"; 

    try { 
     preparedStatement = connection.prepareStatement(query); 
     preparedStatement.setString(1, txtId.getText()); 
     preparedStatement.setString(2, txtName.getText()); 
     preparedStatement.setString(3, txtLastName.getText()); 
     preparedStatement.setString(4, txtAge.getText()); 
     preparedStatement.setString(5, txtUsername.getText()); 
     preparedStatement.setString(6, txtPassword.getText()); 

     Alert aleret = new Alert(AlertType.INFORMATION); 
     aleret.setTitle("Information dialog"); 
     aleret.setHeaderText(null); 
     aleret.setContentText("User has been created"); 
     aleret.showAndWait(); 


     preparedStatement.executeUpdate(); 


    } catch (Exception e) { 
     // TODO: handle exception 
     JOptionPane.showMessageDialog(null, e); 
     e.printStackTrace(); 
    } finally { 
     if(preparedStatement != null) { 
      preparedStatement.close(); 
     } 
    } 
} 

}

+1

Eine andere Verbindung (in diesem oder einem anderen Programm) hat eine aktive Transaktion. –

+0

@ CL. Alle anderen Projekte sind geschlossen und nichts läuft im Hintergrund. Wie kann ich das beheben? – szentmihaly

+0

Versuchen Sie, .db-Datei zu kopieren und dann diese Kopie für Ihr Programm zu verwenden, und sehen Sie, was passiert –

Antwort

0

Ich habe die Lösung gefunden. @ CL. hatte Recht, im Hintergrund lief ein anderes Verbindungsobjekt. Problem war, dass ich preparedStatement und resultSet nicht geschlossen habe, wenn ich mich in der App anmeldete.

PreparedStatement preparedStatement; 
    ResultSet resultSet; 
    String query = "select * from employee where username = ? and password = ?"; 

    try { 
     preparedStatement = connection.prepareStatement(query); 
     preparedStatement.setString(1, user); 
     preparedStatement.setString(2, pass); 

     resultSet = preparedStatement.executeQuery(); 


     if (resultSet.next()) { 
      preparedStatement.close(); // after closing this, it works 
      resultSet.close();   // closed this one also 
      return true; 
     } else { 
      return false; 
     } 


    } catch (Exception e) { 
     // TODO: handle exception 
     return false; 
    } 
Verwandte Themen