eccezione mySql connettore (C ++ libreria per mysql) durante l'inserimento riga nella tabella non vuota

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

Domanda

Non ho fatto molto la programmazione di database a tutti. Sto lavorando da un po 'di codice di esempio per l'utilizzo di MySQL Connector / C ++.

Quando eseguo il seguente codice ottengo un incidente sull'ultima riga in qualche codice std :: string - ma si blocca solo quando la tabella non è vuota. Se la tabella è vuota, inserisce la riga e funziona bene. Se la tabella non è vuota si blocca. Sono abbastanza confuso. C'è qualcosa che sto facendo male con la chiave primaria o altri valori? (I nomi delle colonne sono stati cambiati qui, ma per il resto il codice è testualmente)

Quando guardo la variabile nel codice del template std :: string (quel poco che posso vedere) non vedo alcun valore familiari di dati che stavo cercando di inserire - in modo che non era aiuto a tutti. Vedo qualcosa come "HY000" come valore stringa, ma non sono certo che dove proviene.

Inizialmente ho pensato che potrebbe essere la stringa data, ma il codice funziona bene con un tavolo vuoto e quindi si blocca quando non vuoto. Che indica la stringa di data funziona bene.

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();

Questa è su una piattaforma MS utilizzando Visual Studio 2008.

La banca dati è attivo e funzionante e posso usare altri strumenti di query di database per visualizzare le tabelle, ecc.

EDIT:

che vedo guardando l'eccezione mysql che ho:

"Utilizzo supportato buffer tipo: 4191960 (parametro: 3)" errno 2036

EDIT:

Non sono sicuro se la risposta accettata era esattamente la risposta giusta, ma mi ha aiutato a una soluzione. Fondamentalmente ho rimosso tutti gli attributi non nulli, tirato fuori riempimento zero e impostare la chiave primaria di incremento automatico. Ora funziona bene

È stato utile?

Soluzione

Ho il sospetto che è sia il vostro zero riempita INT o la colonna DATETIME (non sono sicuro che è colonna 3).

Prova a creare la vostra tavola con qualcosa del tipo:

`val3` INT(10) ZEROFILL ,

dove 10 è il numero di posizioni di riempimento con zeri. Io non sono anche sicuro il NULL è necessario, quindi ho escluso che in precedenza.

Inoltre, si può inviare la stringa data di creazione, se quanto sopra non funziona?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top