【发布时间】:2014-07-11 13:39:11
【问题描述】:
我正在将数据插入到 MYSQL 数据库的临时表中。我将“电话”列的大小指定为 VARCHAR(20),并插入了正好 10 个字符的数据,并且它是恒定的。
这是我的代码:
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 into temp__final_table(Name,Address,Phone,EmpNo,Age,DeptNo) values ('Clerk#000000959','Skye Norling','2112 Ravine Drive','7091581728','Clerk#000000959','26')
请帮忙..
【问题讨论】:
-
数据太长(很明显)——在执行之前把插入语句吐出来,粘贴到这里。
-
错误很明显,您的列
phone的长度不足以容纳您尝试插入的电话号码。您尝试的phone值是什么,mysql 中的列定义是什么? -
那是一种糟糕的创建 SQL 语句的方式。至少在 Java 教程中看看它是如何完成的:docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
-
示例电话值为 7091581728,7896146536,包括电话在内的所有值都被插入到 MYSQL 数据库表中,但同样的错误即将到来(仅适用于电话)。
-
正如其他人指出的问题是该列的值太长。运行 DESCRIBE (dev.mysql.com/doc/refman/5.7/en/describe.html) 并发布结果以及正在执行的 INSERT 语句。