0
votes

Comment écrire une requête au printemps pour insérer des enregistrements dans 2 tables dans la base de données MySQL

Je veux écrire une requête pour insérer des données dans deux tables.

Je insère des données dans deux tables, connaissez comme utilisateur et société . utilisateur a une clé étrangère société _id . La structure de la table est donnée coupée

Table utilisateur

  • int user_id; (AI)
  • int company_id; (clé étrangère)
  • String user_name;
  • String User_email;

    Table d'entreprise

    • int company_id; (AI)
    • String Company_Name;

      - xxx

      Je reçois une erreur xxx


2 commentaires

Veuillez éditer votre question, donc ce sera clair. Ce n'est pas lisible maintenant.


merci @nanna pour modifier la question..company_id est fk donc ce n'est pas null.so s'il vous plaît laissez-moi savoir des modifications de requête


3 Réponses :


0
votes

Ceci probablement parce que votre Company_id est défini sur non null dans la table de . Vous devez supprimer non NULL à partir de la colonne Company_ID de votre tableau de création de table de la table utilisateur , si vous souhaitez que la clé étrangère soit nullable. Sinon, vous devez fournir une valeur pour la clé étrangère.


1 commentaires

Société_id est fk donc ce n'est pas null.so s'il vous plaît laissez-moi savoir des changements de requête



0
votes

comme clé étrangère société_id code> ne peut pas être null code>, la société doit exister dans la DB et son identifiant doit être connu avant de pouvoir insérer l'utilisateur.

mise à jour P>

Pour insérer un nouvel utilisateur dont vous avez besoin: p>

  • Nom d'utilisateur LI>
  • une adresse e-mail li>
  • Nom de l'entreprise LI> ul>

    Nous avons d'abord besoin de rechercher le société_id code> pour le nom de la société donné. Si ce n'est pas trouvé dans la base de données, une nouvelle entreprise est insérée. P>

    public void insertUser(String userName, String userEmail, String companyName)
            throws SQLException {
        int companyId = getOrInsertCompany(companyName);
        try (PreparedStatement stmt = cnt.prepareStatement(
                "insert into User(company_id,user_name,user_email)"
                + " values(?,?,?)")) {
            stmt.setInt(1, companyId);
            stmt.setString(1, userName);
            stmt.setString(1, userEmail);
            stmt.executeUpdate();
        }
    }
    
    private int getOrInsertCompany(String companyName) throws SQLException {
        try (PreparedStatement stmt = cnt.prepareStatement(
                "select company_id from Company where company_name=?")) {
            stmt.setString(1, companyName);
            try (ResultSet rs = stmt.executeQuery()) {
                if (rs.next()) {
                    return rs.getInt(1);
                }
            }
        }
        // the company was not found; insert it
        try (PreparedStatement stmt = cnt.prepareStatement(
                "insert into Company(company_name) values(?)")) {
            stmt.setString(1, companyName);
            stmt.execute();
            try (ResultSet rs = stmt.getGeneratedKeys()) {
                if (!rs.next()) {
                    throw new SQLException(
                            "Could not get generated keys");
                }
                return rs.getInt(1);
            }
        }
    }
    


7 commentaires

Société_id est fk donc ce n'est pas null.so s'il vous plaît laissez-moi savoir des changements de requête


@Minakshi vous avez besoin de trois en fait


pls faire me faire savoir comment écrire la requête alors


Nous n'avons pas assez d'informations pour répondre complètement à la question suivante: quel est le schéma, comment les identifiants sont alloués? incrémentation automatique? Séquences?


Sa base de données simple que j'ai mis à jour des informations (AI). Pas de séquences ...


@Minakshi voir ma mise à jour


Vous devrez peut-être faire un commit l'insert



0
votes

Vérifiez la contrainte NON NULL

ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL


0 commentaires