1

私はデータベースプログラミングをまったく行っていません。MySQL Connector /C++を使用するためのいくつかのサンプルコードから作業しています。

次のコードを実行すると、std :: stringコードの最後の行でクラッシュが発生しますが、テーブルが空でない場合にのみクラッシュします。テーブルが空の場合、行が挿入され、正常に機能します。テーブルが空でない場合、クラッシュします。私はかなり混乱しています。主キーまたは他の値で何か問題がありますか?(ここでは列名が変更されていますが、それ以外の場合、コードは逐語的です)

std :: stringテンプレートコードの変数を見ると(ほとんど見えません)、挿入しようとしたデータのなじみのある値が表示されないため、まったく役に立ちませんでした。文字列値として「HY000」のようなものが表示されますが、それがどこから来ているのかわかりません。

最初は日付文字列かもしれないと思っていましたが、コードは空のテーブルで正常に機能し、空でない場合はクラッシュします。これは、日付文字列が正常に機能していることを示しています。

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

これは、VisualStudio2008を使用するMSプラットフォーム上にあります。

データベースは稼働しており、他のデータベースクエリツールを使用してテーブルなどを表示できます。

編集:

取得したmysql例外を確認します。

「サポートされていないバッファタイプの使用:4191960(パラメータ:3)」errno 2036

編集:

受け入れられた答えが正確に正しい答えであったかどうかはわかりませんが、それは私が解決策にたどり着くのに役立ちました。基本的に、null以外の属性をすべて削除し、ゼロフィルを削除して、主キーを自動インクリメントに設定しました。今では正常に動作します

4

1 に答える 1

1

ゼロで埋められた INT または DATETIME 列のいずれかであると思われます (どちらが列 3 かはわかりません)。

次のようなテーブルを作成してみてください。

`val3` INT(10) ZEROFILL ,

ここで、10 はゼロ フィルする位置の数です。NULL が必要かどうかもわからないので、上記では除外しました。

また、上記がうまくいかない場合は、作成した日付文字列を投稿できますか?

于 2009-12-03T04:15:16.820 に答える