2013-01-31 44 views
15

मैं PreparedStatement का उपयोग कर एक बड़े डेटाबेस कॉल का निर्माण करता हूं जिसमें 2000+ पैरामीटर मार्कर हैं।जावा जेडीबीसी तैयार कथन अधिकतम पैरामीटर मार्कर

इम इस त्रुटि

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. 

मैं खोज एपीआई डॉक्स की कोशिश की और गूगल लेकिन यह कैसे कॉन्फ़िगर करने के लिए लगता है सके रही।

क्या किसी को पता है कि यह सीमा संभव है या नहीं? मुझे पता है कि यह एक धीमी डेटाबेस कॉल होने जा रहा है लेकिन यह अभी ठीक है।

इससे मुझे लंबे समय तक कोई समस्या होगी, क्या मैं इसे बैचों में चलाने से बेहतर होगा?

उत्तर

15

आपके जैसे सीम 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"); 
    } 
} 

Here कि यह कैसे हल करने के लिए पर उदाहरण के साथ एक ब्लॉग है।

+0

+1 धन्यवाद, कौन सा वर्ग उस जावा संस्करण से है? – cowls

+2

jTDS1.3 यहां फ़ाइल 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

पर्याप्त उत्तर? –