2014-07-11 94 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。

希望這有助於!

相關問題