Javaで記述されたサーブレット/Tomcatサーバーがあります。
私は自分が書いたmysqlクラスを持っており、その中の関数を使用して、jdbcを使用してプリペアドステートメントをmysqlデータベースに挿入しています。
私が呼び出す関数java.sql.PreparedStatement.setString
は、プリペアドステートメントのパラメーターを設定するために使用します。これは、何千もの異なる入力に対して何ヶ月も問題なく完全に機能しています。
ただし、最近、関数を使用してVARCHARタイプのmysql列にIPアドレスを挿入しようとすると、次のように例外がスローされます。
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '10.1.1.101'
これは奇妙なことです。私のコードのどこにもDOUBLEの概念はなく、mysqlテーブルの「ShowColumns」はデータ型が実際にVARCHARであることを保証します。私は同僚にもこれを見てもらい、単純なものを見逃していないことを再確認しました。しかし、私たちは皆困惑しています。
私の唯一の理論は、IPアドレスの最初の部分がXX.XXの形式であるため、JDBCドライバーまたはSetText関数が自由を取り、DOUBLEデータ型を想定しているというものです。
どんな助けでも素晴らしいでしょう、私の列のデータ型をチェックするなどの明白なことをするように私に言わないでください。私はすべてをチェックするのに2倍と3倍の時間を費やしました。