2012-01-17 10 views
1

私は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=?" 
+0

'entry.getValue()'はおそらく '' hometeamid''( 'string')を返します。これは整数ではありません。 –

+0

はい、そうですが、列名であるので引用符で囲まれていない文字列として必要です。 – artfullyContrived

+0

私の答えをチェックしてください。 –

答えて

1
は次のようにクエリを変更し

。値は渡すことができます。

実際にこの列名を動的にする必要がある場合は、文字列連結を使用してクエリのこの部分を構築する必要があります。

+0

チャームのように働いた。ありがとう – artfullyContrived

1

+0

IONはあなたのグアバのレタイヤを使用しており、それを愛しています。 – artfullyContrived

関連する問題