2013-01-31 30 views
15

Im xây dựng một cuộc gọi cơ sở dữ liệu lớn bằng cách sử dụng PreparedStatement có hơn 2000 dấu tham số.Dấu tham số tối đa của lệnh JDBC được chuẩn bị Java JDBC

Im nhận được lỗi này

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. 

tôi đã cố gắng tìm kiếm trên Documents API và google nhưng couldnt tìm cách cấu hình này.

Có ai biết liệu có thể tăng giới hạn này không? Tôi biết nó sẽ là một cuộc gọi cơ sở dữ liệu chậm nhưng điều đó là tốt cho bây giờ.

Điều này cũng sẽ gây ra cho tôi bất kỳ vấn đề nào trong thời gian dài, liệu tôi có nên chạy nó theo lô không?

Trả lời

15

Đường nối như bạn đang bị kẹt ở năm 2000. Đây là một đoạn bị cắt từ nguồn tài xế.

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 là blog có các ví dụ về cách giải quyết.

+0

+1 Cảm ơn, lớp học nào là từ phiên bản java nào? – cowls

+2

jTDS1.3 Đây là tập tin 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

Câu trả lời đầy đủ? –

Các vấn đề liên quan