2016-08-21 1 views
0


enter image description hereInsérer une valeur auto_increment de la table de test à la table de la table de score à l'aide d'une seule "mise à jour" DButton

MySql tables tests table and scores tables
enter image description here

je besoin de mettre à jour les deux tables avec un seul clic de "Mettre à jour" le bouton. Comment puis-je obtenir la valeur tests.test_id à insérer dans le fichier scores.test_id.

Voici ce que j'ai essayé jusqu'ici, cependant seule la table de test est mise à jour.

String subjectCode = SubjectCombo.getSelectedItem().toString(); //gets value selected from subject code JCombobox 
    String testType = AssesmentCombo.getSelectedItem().toString();//gets value selected from assesment code JCombobox 
    ResultSet rst = null; 
    try { 
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultchecker_db","edunge","[email protected]"); 
     st = con.createStatement(); 
     String query4 = "INSERT INTO tests (subject_id, type, test_id) VALUES (?,?,NULL)"; //query to update tests table 
     ps = con.prepareStatement(query4); 
     ps.setString(1, subjectCode); 
     ps.setString(2, testType); 
     ps.execute(); 
    } catch (SQLException e1) { 
     JOptionPane.showMessageDialog(null, e1); 
    } 
    try { 
     if (rst.next()){ 
      JOptionPane.showMessageDialog(null, "Student record updated"); 
     } 
    } catch (HeadlessException e1) { 
     JOptionPane.showMessageDialog(null, e1); 
    } catch (SQLException e1) { 
     JOptionPane.showMessageDialog(null, e1); 
    } 
    try { 
     con.close(); 
     st.close(); 
     rst.close(); 
    } catch (SQLException e1) { 
     JOptionPane.showMessageDialog(null, e1); 
    } 

// Cette met à jour avec succès la table de test

J'ai aussi essayé de créer une autre connexion mysql sur la ActionListener qui prendra la valeur de test.test_id et insérez-le à table scores, avec le code ci-dessous.

try { 
    Connection con2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/resultchecker_db","edunge","[email protected]"); 
    Statement st2 = con2.createStatement(); 
    String query5 = "SELECT test_id FROM tests ORDER BY test_id DESC LIMIT 1;"; 
    rst2 = st2.executeQuery(query5); 
} catch (SQLException e1) { 
    JOptionPane.showMessageDialog(null, e1); 
} 
try { 
    while(rst2.next()){ 
     label.setText(rst2.getString(1)); //used a label to see if the auto_increment values is received. 
    } 
} catch (SQLException e1) { 
    JOptionPane.showMessageDialog(null, e1); 
} 

Les deux codes de connexion à MySQL DB sont tous dans la "mise à jour" ActionListener.

Le but de ceci est de construire une application simple vérificateur de résultats des élèves, pour différents sujets (avec évaluations et examens continus) et les scores. Je voudrais également recevoir des conseils sur la construction d'une meilleure base de données MySQL

+0

Veuillez noter que votre message contient des informations d'identification. Vous pourriez vouloir les changer parce que les actuels sont publics. – mm759

Répondre

0

L'approche pour interroger l'ID généré peut ne pas toujours fonctionner en cas de concurrence, par ex. plusieurs utilisateurs utilisant l'application en même temps. Cela dépend du niveau d'isolation de l'accès simultané configuré. Si deux transactions insèrent d'abord le test, puis toutes les deux interrogent l'ID, une transaction obtiendra l'ID du test que l'autre transaction a inséré.

Comment obtenir un ID généré est répondu dans this post. Ce sont les principales choses à faire selon le poste:

PreparedStatement statement = connection.prepareStatement(SQL_INSERT, Statement.RETURN_GENERATED_KEYS); 
... 
ResultSet generatedKeys = statement.getGeneratedKeys() 

Je ne reconnais pas de problème concernant votre schéma de base de données, mais vous ne devez penser à la façon d'obtenir l'ID si vous avez utilisé un ORM -framework comme Hibernate.

+0

Merci cela m'a beaucoup aidé – Edunge