2000以上のパラメータマーカーを持つPreparedStatement
を使用して大規模なデータベース呼び出しを構築しています。
このエラーが発生します
Caused by: Java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers.
at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.Java:1139)
at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.Java:156)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.<init>(JtdsPreparedStatement.Java:107)
Caused by: Java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers.
API Docsとgoogleを検索しようとしましたが、これを構成する方法が見つかりませんでした。
この制限を引き上げることが可能かどうか誰かが知っていますか?データベースの呼び出しが遅くなることは承知していますが、今のところは問題ありません。
また、これは長期的には問題を引き起こしますか?バッチで実行する方が良いでしょうか?
あなたが2000年に立ち往生しているような継ぎ目。これはドライバーソースからの切り抜きです。
if (params != null && params.size() > 255
&& connection.getPrepareSql() != TdsCore.UNPREPARED
&& procName != null) {
int limit = 255; // SQL 6.5 and Sybase < 12.50
if (connection.getServerType() == Driver.SYBASE) {
if (connection.getDatabaseMajorVersion() > 12 ||
connection.getDatabaseMajorVersion() == 12 &&
connection.getDatabaseMinorVersion() >= 50) {
limit = 2000; // Actually 2048 but allow some head room
}
} else {
if (connection.getDatabaseMajorVersion() == 7) {
limit = 1000; // Actually 1024
} else if (connection.getDatabaseMajorVersion() > 7) {
limit = 2000; // Actually 2100
}
}
if (params.size() > limit) {
throw new SQLException(
Messages.get("error.parsesql.toomanyparams",
Integer.toString(limit)),
"22025");
}
}
ここ はそれを解決する方法の例を載せたブログです。