excepción mySql Conector (biblioteca de C ++ para MySQL) al insertar fila en la tabla no vacía

StackOverflow https://stackoverflow.com/questions/1837434

Pregunta

No he hecho mucho de programación de base de datos en absoluto. Estoy trabajando a partir de un código de ejemplo para usar MySQL Connector / C ++.

Al ejecutar el siguiente código consigo un accidente en la última línea en algún código std :: string - pero sólo se bloquea cuando la tabla no está vacía. Si la tabla está vacía, se inserta la fila y trabaja muy bien. Si la tabla está vacía no se bloquea. Estoy muy confundido. ¿Hay algo que estoy haciendo mal con la clave principal o los otros valores? (Los nombres de las columnas se han cambiado aquí, pero por lo demás el código es textual)

Cuando miro a la variable en el código de la plantilla std :: string (lo poco que puedo ver) No veo ningún valor de familiares de los datos que yo estaba tratando de insertar - por lo que no ayuda en absoluto. Veo algo así como "HY000" como un valor de cadena, pero no estoy seguro de que donde está viniendo.

Al principio pensé que podría ser la cadena de fecha, pero el código funciona bien con una mesa vacía y luego se bloquea cuando no esté vacía. Eso indica que la cadena de fecha funciona bien.

prep_stmt = con->prepareStatement("INSERT INTO 
   sometable(val1, val2, val3, Date, val5, val6, val7) 
   VALUES (?, ?, ?, ?, ?, ?, ?)");

        /*
            `idLicenses` INT NOT NULL ,
            `val1` VARCHAR(45) NOT NULL ,
            `val2` INT NOT NULL ,
            `val3` INT ZEROFILL NULL ,
            `Date` DATETIME NOT NULL ,
            `val5` VARCHAR(45) NOT NULL ,
            `val6` VARCHAR(45) NOT NULL ,
            `val7` VARCHAR(45) NOT NULL ,
        */

        //  val1, val5, val6 and val7 are std::strings, val2 and val3 are ints.
        prep_stmt->setString(1, val1);
        prep_stmt->setInt(2, val2);
        prep_stmt->setInt(3, 0);
        prep_stmt->setDateTime(4, /* I created some date string here*/);
        prep_stmt->setString(5, val5);
        prep_stmt->setString(6, val6);
        prep_stmt->setString(7, val7);
        prep_stmt->execute();

Esto es en una plataforma MS utilizando Visual Studio 2008.

La base de datos está en marcha y que se puede utilizar otras herramientas de consulta de base de datos para ver las tablas, etc.

EDIT:

veo mirando la excepción MySQL que me sale:

"Uso de tipo de tampón no soportada: 4191960 (parámetro: 3)" errno 2036

EDIT:

No estoy seguro de si la respuesta aceptada era exactamente la respuesta correcta, pero me ayudó a llegar a una solución. Básicamente me quita todos los atributos que no son nulos, saqué relleno cero y establecer la clave primaria de incremento automático. Ahora funciona bien

¿Fue útil?

Solución

Sospecho que es ya sea el llenado de cero INT o columna DATETIME (no estoy seguro que es la columna 3).

Trate de crear su mesa con algo como:

`val3` INT(10) ZEROFILL ,

donde 10 es el número de posiciones a un relleno de cero. Tampoco estoy seguro de que el NULL es necesario, por lo que la excluyó anteriormente.

Además, se puede colocar la cadena de fecha que ha creado si el anterior no funciona?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top