2010-01-21 39 views
8

Tôi nhận được một lỗi lạ từ trình điều khiển JDBC SQL Server. Nó nói với tôi rằng một tên cột không hợp lệ mặc dù cột có mặt, được đặt tên chính xác và cùng một truy vấn hoạt động tốt khi được thực hiện trong SqlServer Management Studio.Ngoại lệ máy chủ SQL: "Tên cột xxx không hợp lệ" khi sử dụng JDBC

Lỗi này là:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The column name MarginCall is not valid. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170) 
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.findColumn(SQLServerResultSet.java:626) 
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getBigDecimal(SQLServerResultSet.java:2570) 
    at org.apache.commons.dbcp.DelegatingResultSet.getBigDecimal(DelegatingResultSet.java:305) 
... 
+3

Bạn có thể bao gồm mã vi phạm không? Tên có khớp với các giá trị bạn nhận được trong ResultSet.getColumnNames không? –

Trả lời

11

Sự cố được giải quyết. Đó là một sai lầm đơn giản của tôi.

Truy vấn của tôi đã sử dụng mệnh đề 'AS' trong câu lệnh chọn. Tôi đã cố gắng để lấy giá trị cột từ ResultSet bằng cách sử dụng tên cột thực tế, thay vì bí danh cột được định nghĩa trong mệnh đề AS.

Lỗi học sinh. Xin lỗi vì đã lãng phí thời gian.

Rất cám ơn Steve B. vì đã đề xuất sử dụng ResultSet.getColumnNames(). Mặc dù lời gọi phương thức thực tế mà tôi đã sử dụng là ResultSet.getMetaData(). GetColumnName (columnIndex);

0

Cố gắng kèm theo tên cột bên trong dấu ngoặc vuông: [MarginCall] Chỉ cần một đoán.

+0

Tôi e rằng đó không phải là vấn đề nhưng cảm ơn rất nhiều vì gợi ý. –

1

Kiểm tra trường hợp tên bảng của bạn. nếu collation được thiết lập để trường hợp nhạy cảm trên máy chủ sql ms các tên bảng bị ảnh hưởng quá.

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