2014-07-11 51 views
0

我正在将数据插入到MYSQL数据库的临时表中。我将'Phone'列的大小设置为VARCHAR(20)并且插入了完全10个字符的数据它是不变的。数据截断:第1行'Phone'列的数据太长

这里是我的代码:

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; 

和我收到以下错误:

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) 

表定义:

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 

Insert语句:

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

请帮助..

+0

数据太长(显然) - 在执行它之前吐出插入语句并将其粘贴到此处。 – dwjv

+0

错误非常明显,您的列'phone'对于您尝试插入的电话号码来说不够长。你正在尝试什么'phone'值,以及mysql中的列定义是什么? –

+0

这是一种创建SQL语句的可怕方法。至少看看它是如何在Java教程中完成的:http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – Paul

回答

0

这是你的问题:

'2112家沟驱动'

在插入查询

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

您正在电话字段中插入地址。

另外,'Clerk#000000959'似乎是EmpNo。您似乎将其插入同一行中的多个列中。

此外,建议将在必要时使用numeric字段。您的DeptNo看起来像是整数类型的完美候选人。您不需要为所有列使用varchar。

希望这有助于!

相关问题