2017-10-09 28 views
0

J'essaie d'insérer des valeurs dans ma base de données via java mais je reçois toujours un message d'erreur "n'a pas de valeur par défaut". J'ai regardé en ligne pour trouver de l'aide mais ils n'ont pas vraiment résolu mon problème. C'est l'erreur que j'obtiens "java.sql.SQLException: Le champ 'firstName' n'a pas de valeur par défaut".Insérer dans l'erreur de valeur par défaut sql

import java.sql.*; 

class MysqlCon { 

public static void main(String[] args) { 
    String personalID = null; 
    String firstname = null; 
    String lastname = null; 
    String addressone = null; 
    String addresstwo = null; 
    String city = null; 
    String state = null; 
    String zipcode = null; 
    String phone = null; 
    String email = null; 

    try 
    { 

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Address_Book","root",""); 
Statement stmt = con.createStatement(); 

personalID ="3"; 
firstname = "John"; 
lastname = "Doe"; 
addressone = "4000 s.c.r. 222"; 
addresstwo = "5000 n.c.r. 333"; 
city = "place"; 
state = "Texas"; 
zipcode = "43523"; 
phone = "43523524"; 
email = "[email protected]"; 

stmt.executeUpdate("insert into Names(personID) values("+personalID+")"); 
stmt.executeUpdate("insert into Names(firstname) values("+firstname+")"); 
stmt.executeUpdate("insert into Names(lastname) values("+lastname+")"); 
stmt.executeUpdate("insert into addresses(address1) values("+addressone+")"); 
stmt.executeUpdate("insert into addresses(address2) values("+addresstwo+")"); 
stmt.executeUpdate("insert into addresses(city) values("+city+")"); 
stmt.executeUpdate("insert into addresses(state) values("+state+")"); 
stmt.executeUpdate("insert into addresses(zipcode) values("+zipcode+")"); 
stmt.executeUpdate("insert into phoneNumbers(phoneNumber) values("+phone+")"); 
stmt.executeUpdate("insert into emailAddresses(emailAddress) values("+email+")"); 
con.close(); 
    }catch(Exception e){System.out.println(e);} 
} 

} 
+0

Pouvez-vous poster l'erreur complète? –

+1

Vous devez spécifier toutes les colonnes dans une déclaration: 'INSERT INTO Noms (personID, firstname, ...) VALUES (?,?, ...)' – shmosel

+0

J'ai ajouté le message d'erreur que je reçois. – RayKing8

Répondre

0

Vous êtes actuellement en cours d'exécution de trois instructions d'insertion séparées dans une table, comme:

INSERT INTO Names (personID) values (3); 
INSERT INTO Names (firstname) values ("John"); 
INSERT INTO Names (lastname) values ("Doe"); 

Vous finirez avec 3 rangées séparées, au lieu d'une seule ligne. Si l'une des colonnes requiert une valeur (c'est-à-dire si vous avez une clé primaire sans auto_increment), l'insertion échouera puisqu'elle nécessitera une valeur pour la colonne (edit: dans ce cas vous avez une valeur obligatoire pour le champ firstName) .

Vous aurez également une table très inutile qui contiendra des entrées telles qu'une ligne avec rien d'autre que le nom "John", une ligne avec rien d'autre que le nom "Doe" et une ligne avec personID de 3.

, vous devriez plutôt exécuter une seule instruction INSERT, tels que:

stmt.executeUpdate("insert into Names(personID, firstname, lastname) values("+personalID+", "+firstname+", "+lastname+")"); 

qui devrait également remplir toutes les cellules nécessaires dans une rangée.

0

Veuillez d'abord essayer d'exécuter l'une des commandes insert into dans le shell de la base de données - vous verrez que la commande insert into Names(personID) values(3) est incorrecte car DB ne sait pas quoi insérer dans les autres champs. Cependant, il sait s'il y a une valeur par défaut pour les champs manquants - c'est pourquoi DB se plaint.

Si vous ne disposez pas des valeurs par défaut pour cette table (ils sont mis en place alors que la création de la table), vous devez donner toutes les valeurs à la fois comme ceci:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);