私はgameid、hometeamid、visitorteamid、winneridをintとして持っています。投稿列名を整数として
クエリ
Update game set winnerid=hometeamid where gameid=1;
は、MySQLのワークベンチ上で正常に動作します。
は、私が「hometeamidが」文字列として渡されているので、エラーjava.sql.BatchUpdateException: Incorrect integer value: 'hometeamid' for column 'winnerId' at row 1
投げて成功することなく、プリペアドステートメントから同じことを実行しようとしています。 私はPreparedStatementのから正しく更新を実行するにはどうすればよい
String query = "update `match` set winnerid= ? where gameid=?";
Map<Integer, String> data = getMap();//gameid and either 'hometeamid' or 'awaytemid'
try {
PreparedStatement ps = connection.prepareStatement(query);
for (Map.Entry<Integer, String> entry : data.entrySet()) {
ps.setObject(1, entry.getValue());
ps.setInt(2, entry.getKey());
ps.addBatch();
}
ps.executeBatch();
} catch (SQLException e) {
logger.error(e, e);
} finally {
closeQuietly(connection);
}
を次のようにコードはありますか?
その他の改良点は高く評価されています。あなたが準備されたステートメントのパラメータとして列名を渡すことはできません
String query = "update `match` set winnerid = case when ? = 'hometeamid' then hometeamid else visitorteamid end where gameid=?"
'entry.getValue()'はおそらく '' hometeamid''( 'string')を返します。これは整数ではありません。 –
はい、そうですが、列名であるので引用符で囲まれていない文字列として必要です。 – artfullyContrived
私の答えをチェックしてください。 –