Recorrer archivo excel
Publicado por David (2 intervenciones) el 07/09/2007 09:23:37
Hola a todos. Tengo un problemilla con una parte del codigo de mi programa. Este consiste en recorrer un ficherito excel hacer una serie de calculos, grabar datos en una base de datos MySql, y sacar un resultado en un Jsp. El problema viene cuando recorre un campo determinado que al parecer es mayor del tamaño definido y canta el siguiente error:
java.sql.SQLException: null, message from server: "Data truncated for column 'TaskId' at row 1"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1876)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1098)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1192)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1153)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2048)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2005)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1252)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1198)
at filesmanagement.ToImport.ImportTasks(ToImport.java:268)
at theservlets.importer.processRequest(importer.java:66)
at theservlets.importer.doPost(importer.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
La parte de codigo en la que falla es la siguiente:
for (int k=0; k<colsToImport.length;k++) {
j=colsToImport[k];
cell = row.getCell((short)j);
System.out.println("Cell es :"+ cell); /**********/
System.out.println("++++++++++++++++ j = "+j); /**********/
chaine=" ";
if (cell != null) {
if ( cell.getCellType() == cell.CELL_TYPE_STRING ) {
System.out.println("si la cell es null y String"); /**********/
chaine = cell.getStringCellValue();
System.out.println("chaine = "+chaine); /**********/
}
if ( cell.getCellType() == cell.CELL_TYPE_NUMERIC ) {
System.out.println("si la cell es null y Numeric"); /**********/
chaine = Double.toString(cell.getNumericCellValue());
System.out.println("chaine = "+chaine); /**********/
}
if ( j<11 && j>8 ) {
System.out.println("si j<11 y j>8"); /**********/
chaine = df.format(cell.getDateCellValue());
System.out.println("chaine = "+chaine);
if (chaine.compareTo(" ")==0 )
chaine="0000-00-00 00:00:00";
}
}
else {
System.out.println("si la cell NO es null"); /**********/
if (j<11 && j>8)
chaine="0000-00-00 00:00:00";
}
if (j==11) {
System.out.println("si j=11"); /**********/
sqlInsert += "'"+chaine+"')";
}
else {
System.out.println("si j NO es 11"); /**********/
sqlInsert += "\""+chaine+"\",";
}
}
System.out.println(i);
System.out.println("sqlInsert es :"+ sqlInsert); /**********/
sta.executeUpdate(sqlInsert); /** Aqui es donde canta el error **/
}
Como vereis ahora el problema viene cuando ejecuta la query en: "sta.executeUpdate(sqlInsert);", justo cuando la variable chain almacena el valor de la celda del excel mayor en tamaño.(10009148)
A la hora de depurarlo impreme esto:
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@103c29b
++++++++++++++++ j = 7
si la cell es null y Numeric
chaine = 1.0009148E7
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1dd7bc5
++++++++++++++++ j = 6
si la cell es null y Numeric
chaine = 5058812.0
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1e8c585
++++++++++++++++ j = 0
si la cell es null y String
chaine = 5013757
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@ffa6eb
++++++++++++++++ j = 4
si la cell es null y String
chaine = Working
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@27cd63
++++++++++++++++ j = 5
si la cell es null y String
chaine = I7
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@11d3226
++++++++++++++++ j = 9
si la cell es null y Numeric
chaine = 39293.495104166665
si j<11 y j>8
chaine = 2007-07-30 11:52:57
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1c79dfc
++++++++++++++++ j = 10
si la cell es null y Numeric
chaine = 39293.495104166665
si j<11 y j>8
chaine = 2007-07-30 11:52:57
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@553763
++++++++++++++++ j = 11
si la cell es null y Numeric
chaine = 0.0
si j=11
17
sqlInsert es :INSERT INTO task VALUES ("1.0009148E7","5058812.0","5013757","Working","I7","2007-07-30 11:52:57","2007-07-30 11:52:57",'0.0')
Como podeis ver el registro anterior lo graba correctamente pero al llegar al de 8 dijitos parece que no lo coge correctamente y coge este valor en su lugar "1.0009148E7".
Espero que me podais ayudar lo antes posible. Me estoy volviendo loco XD. Un saludo. Y gracias a todos. Felicidades por este foro.
java.sql.SQLException: null, message from server: "Data truncated for column 'TaskId' at row 1"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1876)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1098)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1192)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1153)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2048)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2005)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1252)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1198)
at filesmanagement.ToImport.ImportTasks(ToImport.java:268)
at theservlets.importer.processRequest(importer.java:66)
at theservlets.importer.doPost(importer.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
La parte de codigo en la que falla es la siguiente:
for (int k=0; k<colsToImport.length;k++) {
j=colsToImport[k];
cell = row.getCell((short)j);
System.out.println("Cell es :"+ cell); /**********/
System.out.println("++++++++++++++++ j = "+j); /**********/
chaine=" ";
if (cell != null) {
if ( cell.getCellType() == cell.CELL_TYPE_STRING ) {
System.out.println("si la cell es null y String"); /**********/
chaine = cell.getStringCellValue();
System.out.println("chaine = "+chaine); /**********/
}
if ( cell.getCellType() == cell.CELL_TYPE_NUMERIC ) {
System.out.println("si la cell es null y Numeric"); /**********/
chaine = Double.toString(cell.getNumericCellValue());
System.out.println("chaine = "+chaine); /**********/
}
if ( j<11 && j>8 ) {
System.out.println("si j<11 y j>8"); /**********/
chaine = df.format(cell.getDateCellValue());
System.out.println("chaine = "+chaine);
if (chaine.compareTo(" ")==0 )
chaine="0000-00-00 00:00:00";
}
}
else {
System.out.println("si la cell NO es null"); /**********/
if (j<11 && j>8)
chaine="0000-00-00 00:00:00";
}
if (j==11) {
System.out.println("si j=11"); /**********/
sqlInsert += "'"+chaine+"')";
}
else {
System.out.println("si j NO es 11"); /**********/
sqlInsert += "\""+chaine+"\",";
}
}
System.out.println(i);
System.out.println("sqlInsert es :"+ sqlInsert); /**********/
sta.executeUpdate(sqlInsert); /** Aqui es donde canta el error **/
}
Como vereis ahora el problema viene cuando ejecuta la query en: "sta.executeUpdate(sqlInsert);", justo cuando la variable chain almacena el valor de la celda del excel mayor en tamaño.(10009148)
A la hora de depurarlo impreme esto:
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@103c29b
++++++++++++++++ j = 7
si la cell es null y Numeric
chaine = 1.0009148E7
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1dd7bc5
++++++++++++++++ j = 6
si la cell es null y Numeric
chaine = 5058812.0
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1e8c585
++++++++++++++++ j = 0
si la cell es null y String
chaine = 5013757
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@ffa6eb
++++++++++++++++ j = 4
si la cell es null y String
chaine = Working
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@27cd63
++++++++++++++++ j = 5
si la cell es null y String
chaine = I7
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@11d3226
++++++++++++++++ j = 9
si la cell es null y Numeric
chaine = 39293.495104166665
si j<11 y j>8
chaine = 2007-07-30 11:52:57
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@1c79dfc
++++++++++++++++ j = 10
si la cell es null y Numeric
chaine = 39293.495104166665
si j<11 y j>8
chaine = 2007-07-30 11:52:57
si j NO es 11
Cell es :org.apache.poi.hssf.usermodel.HSSFCell@553763
++++++++++++++++ j = 11
si la cell es null y Numeric
chaine = 0.0
si j=11
17
sqlInsert es :INSERT INTO task VALUES ("1.0009148E7","5058812.0","5013757","Working","I7","2007-07-30 11:52:57","2007-07-30 11:52:57",'0.0')
Como podeis ver el registro anterior lo graba correctamente pero al llegar al de 8 dijitos parece que no lo coge correctamente y coge este valor en su lugar "1.0009148E7".
Espero que me podais ayudar lo antes posible. Me estoy volviendo loco XD. Un saludo. Y gracias a todos. Felicidades por este foro.
Valora esta pregunta


0