2013-01-31 17 views
15

2000 + parametre işaretçileri olan PreparedStatement kullanarak büyük bir veritabanı çağrısı yapıyorum.Java JDBC hazırlanmış maksimum parametre işaretçileri

Im API Dokümanlar arama çalıştı ve google ancak bu nasıl yapılandırılacağı bulamadım bu hatayı

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. 

alma.

Bu sınırı aşmanın mümkün olup olmadığını bilen var mı? Bunun yavaş bir veritabanı çağrısı olacağının farkındayım ama bu şimdilik iyi.

Ayrıca bu, uzun vadede herhangi bir sorun oluşturmama neden olacak, toplu işlerde çalıştırmama daha iyi olur mu?

cevap

15

2000'de sıkıştığınız gibi dikişler. İşte sürücü kaynağından bir kesik.

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"); 
    } 
} 

Here

bunu çözmek için nasıl örneklerle bir blog vardır.

+0

+1 Teşekkürler hangi sınıf ve hangi java sürümü? – cowls

+2

jTDS1.3 İşte http://sourceforge.net/p/jtds/code/1228/tree/branches/jTDS%201.3%20%28stable%29/src/main/net/sourceforge/jtds/jdbc/ SQLParser.java # l1223 –

+0

Yeterli cevap? –

İlgili konular