– 次のようなコードで SQLException が出て, クエリのどこがおかしいのか数分悩んでしまった。
final int nLimit = 10;
final int nOffset = 20;
Connection con = getConnection();
try{
PreparedStatement ps = con.prepareStatement(
“select id from user limit ? offset ?”); // ここで例外
try {
ps.setInt(1, nLimit);
ps.setInt(2, nOffset);
// ….
} finally { ps.close(); }
} finally { con.close(); }
パラメータマーカー “?” は limit, offset には使えないというのが答え(com.mysql.jdbc(mysql-connector-java) 3.1.6 で確認)。次のようにするしかないのかな…
“select id from user limit ” + nLimit + ” offset ” + nOffset
オフセットや表示数を外部から受け取る場合はもちろん int に変換してからにすること。