J'ai un problème lorsque j'insère des données dans une base de données. Il retourne que 1 ligne est insérée, mais quand je vérifie réellement la base de données, rien de nouveau n'a été réellement inséré.JAVA - insertion dans un problème de base de données
Voilà ma fonction de mise à jour:
public int update(String sqlStatement) {
int rows = 0;
try {
Statement st = this.conn.createStatement();
rows = st.executeUpdate(sqlStatement);
this.conn.commit();
st.close();
} catch (Exception err) {
System.out.println("Got err doing update: " + err.getMessage());
}
return rows;
}
Et voici la fonction appeler via son objet:
db = new Database();
int rows = 0;
String sql = "INSERT INTO tblStudent (firstName, lastName, username, password, isAdmin) ";
sql += String.format("VALUES ('%s', '%s', '%s', '%s', %d)", fName, lName, username, passwd, isAdmin);
System.out.println("Trying " + sql);
if((rows = db.update(sql)) == 0) {
System.out.println("Could not create new user");
throw new Exception();
}
System.out.println("Rows " + rows);
Comme je l'ai dit, il est de signaler qu'une seule ligne est insérée dans la base de données, mais rien n'est réellement là. Le DB est une base de données MS Access.
Toute aide appréciée.
G
D'abord, utilisez l'instruction de préparation et non la concaténation manuelle. – h3xStream
Lorsque vous vérifiez la base de données en dehors de cette application, la connexion des applications a-t-elle été fermée? Lorsque vous exécutez la requête SELECT à partir de votre application avec cette connexion, les données sont-elles présentes? –
Avant de faire l'insertion, je fais une sélection, en vérifiant si certains utilisateurs sont présents dans la base de données. Cette sélection fonctionne correctement et obtient correctement les données de la même table. RE: utilisation de l'instruction prepare. Je me rends compte qu'il existe d'autres façons de le faire, mais j'aimerais essayer de comprendre pourquoi cette façon particulière ne fonctionne pas. – SynackSA