-1

您好我正在尝试在表格中插入下一个值。这个表有 32 个值,第一个是自动增量的,所以没有必要放它,但是当我执行它时,我有下一个错误:

java.sql.SQLException: Column count doesn't match value count at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
at es.uniway.wscloud.WscloudImpl.sincronizarPedidos(WscloudImpl.java:1729)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

这是查询:

SQL="INSERT INTO servidores_virtuales (id_pedido,nombre_servidor,duracion_contrato,cpu_cant,ram_cant,"+
                "hdd_cant,hdd_unidad,sv_pvp,cpu_pvp,ram_pvp,hdd_pvp,sv_pvp_dist,sv_pvp_dist,cpu_pvp_dist,ram_pvp_dist,hdd_pvp_dist,"+
                "ip_pvp,ip_pvp_dist,ip_polled_pvp,ip_polled_pvp_dist,ip_custom_pvp,ip_custom_pvp_dist,data_center,cluster,plantilla,"+
                "estado_aprobacion,f_aprobacion,f_provision,es_actualizacion,f_actualizacion,disco_almacenamiento,id_sv_ccis)VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

                int keyServidorV=0;
                System.out.println("Key de pedido es:"+key);
                this.pstm = this.conexion.prepareStatement(SQL,PreparedStatement.RETURN_GENERATED_KEYS);


                this.pstm.setInt(1, key); //Last insert id de pedido
                this.pstm.setString(2, pedido.getDatos_SV()[i].getNombre_servidor());
                this.pstm.setString(3, pedido.getDatos_SV()[i].getDuracion_contrato());
                this.pstm.setInt(4, pedido.getDatos_SV()[i].getCpu_cant());
                this.pstm.setString(5, pedido.getDatos_SV()[i].getRam_cant());
                this.pstm.setString(6, pedido.getDatos_SV()[i].getHdd_cant());
                this.pstm.setString(7, pedido.getDatos_SV()[i].getHdd_unidad());
                this.pstm.setDouble(8, pedido.getDatos_SV()[i].getSv_pvp());
                this.pstm.setDouble(9, pedido.getDatos_SV()[i].getCpu_pvp());
                this.pstm.setDouble(10, pedido.getDatos_SV()[i].getRam_pvp());
                this.pstm.setDouble(11, pedido.getDatos_SV()[i].getHdd_pvp());
                this.pstm.setDouble(12, pedido.getDatos_SV()[i].getSv_pvp_dist());
                this.pstm.setDouble(13, pedido.getDatos_SV()[i].getCpu_pvp_dist());
                this.pstm.setDouble(14, pedido.getDatos_SV()[i].getRam_pvp_dist());
                this.pstm.setDouble(15, pedido.getDatos_SV()[i].getHdd_pvp_dist());
                this.pstm.setDouble(16, pedido.getDatos_SV()[i].getIp_pvp());
                this.pstm.setDouble(17, pedido.getDatos_SV()[i].getIp_pvp_dist());
                this.pstm.setDouble(18, pedido.getDatos_SV()[i].getIp_polled_pvp());
                this.pstm.setDouble(19, pedido.getDatos_SV()[i].getIp_polled_pvp_dist());
                this.pstm.setDouble(20, pedido.getDatos_SV()[i].getIp_custom_pvp());
                this.pstm.setDouble(21, pedido.getDatos_SV()[i].getIp_custom_pvp_dist());
                this.pstm.setString(22, pedido.getDatos_SV()[i].getData_center());
                this.pstm.setString(23, pedido.getDatos_SV()[i].getCluster());
                this.pstm.setString(24, pedido.getDatos_SV()[i].getPlantilla());
                this.pstm.setInt(25, pedido.getDatos_SV()[i].getEstado_aprobacion());
                java.sql.Date f_aprobacionAux = new java.sql.Date(pedido.getDatos_SV()[i].getF_aprobacion().getTime());  
                this.pstm.setDate(26, f_aprobacionAux);
                java.sql.Date f_provisionAux = new java.sql.Date(pedido.getDatos_SV()[i].getF_provision().getTime());
                this.pstm.setDate(27, f_provisionAux);
                this.pstm.setBoolean(28, pedido.getDatos_SV()[i].isEs_actualizacion());
                if(pedido.getDatos_SV()[i].getF_actualizacion()!=null){
                    java.sql.Date f_actualizacionAux =new java.sql.Date(pedido.getDatos_SV()[i].getF_actualizacion().getTime());
                    this.pstm.setDate(29, f_actualizacionAux);  
                }else{

                  this.pstm.setDate(29, null);

                }
                this.pstm.setString(30, pedido.getDatos_SV()[i].getDisco_almacenamiento());
                this.pstm.setInt(31,pedido.getDatos_SV()[i].getId_servidor_virtual_ccis());





                switch(pedido.getDatos_SV()[i].getEstado_aprobacion()){


                     case 0:{
                         switch(estado_pedido){
                             case 0:{
                                 estado_pedido =1;
                                 break;
                             }
                             case 1:{
                                 estado_pedido =1;
                                 break;
                             }
                             case 2:{
                                 estado_pedido = 1;
                                 break;
                             }

                         }
                         break;
                     }
                     case 1:{
                         switch(estado_pedido){

                            case 0:{
                                estado_pedido = 2;
                                break;
                            }
                            case 1:{
                                estado_pedido =1;
                                break;
                            }
                            case 2:{
                                estado_pedido=2;
                                break;
                            }
                         }
                         break;
                     }

                }
                if(estado_pedido==2){
                    if(f_aprobacion==null){
                        f_aprobacion = pedido.getDatos_SV()[i].getF_aprobacion();
                    }else{
                        if (f_aprobacion.compareTo(pedido.getDatos_SV()[i].getF_aprobacion())<0){

                            f_aprobacion = pedido.getDatos_SV()[i].getF_aprobacion();
                        }else{
                            f_aprobacion = f_aprobacion;
                        }

                    }

                    if(pedido.getDatos_SV()[i].getF_provision()==null){
                        pedido_provisionado = false;
                    }
                    if(f_provision == null){
                        pedido.getDatos_SV()[i].getF_provision();
                    }else{
                        if(pedido.getDatos_SV()[i].getF_provision().compareTo(f_provision)>0){
                            f_provision=pedido.getDatos_SV()[i].getF_provision();
                        }else{
                            f_provision=f_provision;
                        }
                    }

                }

                String [] duracion = pedido.getDatos_SV()[i].getDuracion_contrato().split(" ");
                int cant = Integer.parseInt(duracion[0].trim());
                String unidad = duracion[1].trim().toUpperCase();

                if(unidad_duracion_contrato == ""){
                    unidad_duracion_contrato = unidad;
                    duracion_contrato = cant;
                }else{
                    if (unidad_duracion_contrato != unidad || duracion_contrato != cant){
                        throw new Exception ("Pedido con diferentes duraciones de contrato: "+pedido.getId_pedido());
                    }
                }

                int ejecutadoServiVirtual =  this.pstm.executeUpdate();

                if(ejecutadoServiVirtual==0){   
                   try {
                    throw new Exception("Error al grabar Pedidos");
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

拜托,你能帮我解决这个问题吗?非常感谢

4

5 回答 5

1

您的 SQL 查询列出了 32 列(“id_pedido”等),但只有 31 个值(“?”)。列列表必须与值列表匹配。如果您不打算为列指定值,则不要将该列包含在列列表中。

于 2012-09-26T15:49:21.747 回答
0

你少了一个'?在价值观中。算对了。你有 32 列,但你只给了 31 '?如果第一个字段是自动增量,则忽略自动增量字段

于 2012-09-26T15:41:22.753 回答
0

如果为自动增量字段插入空值,则 mysql 将生成增量值。

于 2012-09-26T15:41:36.277 回答
0

您的列 ID 应该与您的 '?' 匹配。您可以从列 ID 列表中删除“id_pedido”列 ID,这应该可以修复它。

于 2012-09-26T15:49:28.683 回答
-1

通常,当修改的值的顺序与实际存储在表中的顺序不同时会发生此异常。检查列索引。

于 2015-02-10T04:04:17.080 回答