2014-07-11 3 views
0

J'insère des données dans la table temporaire dans la base de données MYSQL.J'ai donné la taille de la colonne 'Phone' sous la forme VARCHAR (20) et j'ai inséré exactement 10 caractères et c'est constant.Troncation de données: Données trop longues pour la colonne 'Téléphone' à la ligne 1

Voici mon code:

java.sql.PreparedStatement insertStmt = null; 

       String insertQuery = "insert into "+tableName+"("; 
       for(String col : columnList){ 
          insertQuery+=col+","; 
         } 
       insertQuery = insertQuery.substring(0,insertQuery.lastIndexOf(",")); 
         insertQuery+=") values ("; 
         for(String col : columnList){ 
          insertQuery+="?,"; 
         } 
       insertQuery = insertQuery.substring(0,insertQuery.lastIndexOf(",")); 
          insertQuery+=")"; 
         insertStmt = mysqlConn.prepareStatement(insertQuery); 

       while(rs.next()) 
        { 
        for(int j=1;j<=columnList.size();j++) 
        { 
         insertStmt.setString(j,rs.getString(j).trim()); 
         System.out.println(rs.getString(j).trim()); 
        } 
        insertStmt.addBatch(); 
        i++; 

        } 
       insertStmt.executeBatch(); 

       mysqlConn.setAutoCommit(true); 
       rs = null; 

et je reçois ci-dessous erreur:

java.sql.BatchUpdateException: Data truncation: Data too long for column 'Phone' at row 1 
Completed Temp tables 1&2 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269) 
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:955) 
    at MultipleDataExtraction.addDataToTempTable(MultipleDataExtraction.java:132) 
    at MultipleDataExtraction.addDataToFinalTempTable(MultipleDataExtraction.java:94) 

Tableau Définition:

EmpNo varchar(15) YES NULL, Name varchar(18) YES NULL, Address varchar(40) YES NULL, Phone varchar(20) YES NULL, Age varchar(4) YES NULL, DeptNo varchar(20) YES NULL 

Insérer déclaration:

insert into temp__final_table(Name,Address,Phone,EmpNo,Age,DeptNo) values ('Clerk#000000959','Skye Norling','2112 Ravine Drive','7091581728','Clerk#000000959','26') 

S'il vous plaît aider ..

+0

Les données sont trop longues (évidemment) - crachez l'instruction d'insertion avant de l'exécuter et collez-la ici. – dwjv

+0

L'erreur est assez claire, votre colonne 'phone' n'est pas assez longue pour le numéro de téléphone que vous essayez d'insérer. Quelle est la valeur 'phone' que vous essayez et quelle est la définition de la colonne dans mysql? –

+0

C'est une manière terrible de créer une instruction SQL. À tout le moins, regardez comment cela se fait dans le tutoriel Java: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – Paul

Répondre

0

Ceci est votre problème:

'Ravine 2112, promenade'

dans la requête d'insertion.

insert into temp__final_table(Name,Address,Phone,EmpNo,Age,DeptNo) values ('Clerk#000000959','Skye Norling','2112 Ravine Drive','7091581728','Clerk#000000959','26') 

Vous insérez une adresse dans le champ téléphonique. En outre, 'Clerk#000000959' semble être le EmpNo. Vous semblez l'insérer dans plusieurs colonnes dans la même rangée.

En outre, une suggestion serait d'utiliser numeric champs si nécessaire. Votre DeptNo ressemble à un candidat parfait pour le type entier. Vous n'avez pas besoin d'utiliser varchar pour toutes les colonnes.

Espérons que cela aide !!!

Questions connexes