Bonjour à tous,

Ceci est mon premier message sur le forum, je suis ravis de faire partie de cette communauté.(Enfin, de bientôt en faire partie j'imagine).
Je viens tout droit de St@ck0v3fl0w, j'en ai marre de me faire pourrir de vote down sur mes postes par des gens complètement random qui n'expliquent même pas le pourquoi de leur action.
Bref, revenons en au fait !

Je suis actuellement en train de développer une appli mobile Java, sur Android Studio, et je rencontre un problème de l'ordre un peu plus global que le dev. mobile : d'où mon poste dans ce sous forum.

Mon application est connectée à l'aide de JTDS & jdbc à une base de données MS SQL Server.(On partira du principe que la connexion en direct à la DB, c'est OK ! )
J'arrive parfaitement à me connecter à la DB, à réaliser des executeQuery() afin de lire des données via des requêtes "SELECT".

Cependant, lorsque j'essaie d'écrire dans ma bdd, soit à l'aide de "INSERT INTO" soit à l'aide de "UPDATE"; il... ne se passe rien. J'ai géré dans mon code toutes les exceptions pouvant se passer en inscrivant des espèces de check point dans mes Log à l'aide de Log.e(String, String), qui atteste du bon déroulement de ma requête... et rien : mes fonctions s'effectuent sans problème(Sans problème, car par exemple quand j'écris INSERT INTO table2 alors que celle ci n'existe pas, j'ai bien une SQLException ! alors que INSERT INTO table1 avec table1 existante, mes logs m'attestent que c'est ok, et preparedstatement.executeUpdate() retourne 1, ce qui sous-entendrait que 1 ligne a bien été affectée... Je deviens fou !)

Le plus bizarre dans tout ça, c'est que lors d'un INSERT INTO dans une table s'auto-incrémentant, aucune nouvelle ligne n'est crée MAIS l'indice d'auto-incrementation augmente. Si au bout de 30 essais de requêtes j'essaie d'écrire une ligne à la main, alors son ID unique auto-incrémenté sera 31... Je deviens fou !

Vous trouverez ci-dessous les fonctions concernées.
J'ai bien sûr caché la connexion SQL, mais partez du principe qu'elle est OK : j'arrive bien à effectuer des requêtes SELECT.

Gestion de la connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static boolean setUpConnexion(String DBNAME) {
        StrictMode.ThreadPolicy policy;
        policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
 
		VARIABLES DE CONNEXION SQL
 
        try {
           ETABLISSEMENT DE LA CONNEXION SQL A L'AIDE DE JTBS
            }
            return true;
        } catch (Exception e) {
            System.out.println("SQL ERROR: " + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
 
    public synchronized static void closeCons() {
        try {
            if (exportCon != null) {
                exportCon.close();
            }
            mainCon.close();
        } catch (Exception e) {
            System.out.println("Erreur a la fermeture des connexions SQL:" + e.getMessage());
            e.printStackTrace();
        }
    }
Execution des requêtes :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static String LOAD_PREVIOUS_H_LOT_NUMBER(String machineNumber) {
        String s = "";
        try {
            setUpConnexion("mainDB");
            ResultSet RS = executeQuery("SELECT h_lot_number FROM valve_assembly_h WHERE machine_number = '" + machineNumber + "' AND statut = 'Actif'", "mainDB");
            while (RS.next()) {
                s = RS.getString(1);
                Log.d("Success : ", "Lot number : " + s);
            }
            closeResultSet(RS);
        } catch (Exception e) {
            error = e.getMessage();
            Log.e("Error :", error);
            s = error;
        }
        closeCons();
        return s;
    }
 
    public static boolean UPDATE_PREVIOUS_H_LOT_STATUT(String h_lot_number_old) {
        try {
            setUpConnexion("mainDB");
            String baseQuery = "UPDATE valve_assembly_h SET statut = 'Expiré' WHERE h_lot_number = '" + h_lot_number_old + "'";
             //PreparedStatement p = newTransact("UPDATE valve_assembly_h SET statut = 'Expiré' WHERE h_lot_number = '" + h_lot_number_old + "'", "mainDB");
            PreparedStatement toReturn = (PreparedStatement) mainCon.prepareStatement(baseQuery);
            int count = toReturn.executeUpdate();
            if (count > 0) {
                Log.d("Sucess : ", "Previous h_lot updated.");
                closeCons();
                return true;
            } else {
                Log.e("Error : ", "No lot found with this number.");
                closeCons();
                return false;
            }
        } catch (SQLException e) {
            error = e.getMessage();
            Log.e("Error :", error);
            closeCons();
            return false;
        }
 
    }

Et enfin, la plus mastock de tous, la fonction d'INSERT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
public static boolean ADD_VALVE_ASSEMBLY_RESTOCK(String machineNumber, int iRestockPartType, String restockPartNumber, int iDirectPass, int iShift) {
        String h_lot_number_old = "";
        String sDirectPass = String.valueOf(iDirectPass);
        String sShift = String.valueOf(iShift);
        if (setUpConnexion("mainDB")) {
            try {
                h_lot_number_old = LOAD_PREVIOUS_H_LOT_NUMBER(machineNumber);
                PreparedStatement p = newTransact("INSERT INTO valve_assembly_h (\"machine_number\","
                        + " \"h_lot_number\", \"h_lot_number_old\", \"direct_pass\", \"shift\") VALUES ('"
                        + machineNumber + "', '" + restockPartNumber + "', '" + h_lot_number_old
                        + "', '" + sDirectPass + "', '" + sShift + "')", "mainDB");
                int count = p.executeUpdate();
                if (count > 0) {
                    Log.d("Success : ", count + " line(s) created. ");
                } else {
                    Log.e("Error : ", "Unexpected result");
                }
                UPDATE_PREVIOUS_H_LOT_STATUT(h_lot_number_old);
                closeCons();
                return true;
            } catch (SQLException e) {
                error = e.getMessage();
                Log.e("Error :", error);
                return false;
            }
        } else {
            Log.e("Error", "Impossible to set up the database connection."); // NE DEVRAIT
            return false;                                      // PAS ARRIVER SAUF SI LE WIFI TOMBE
        }
    }

Edit : en complément, voici un petit screen d'une session "Debug" avec les variables debug
Nom : Capture d’écran 2022-04-22 074334.png
Affichages : 269
Taille : 83,0 Ko


À ceux qui sont encore là, merci pour votre lecture et votre temps accordé !

Phae