2013-12-10 15 views
8

Tôi có một bảng trong MYSQL và tôi đang sử dụng các khuôn mẫu JDBC để chèn vào bảng đó.Tại sao mẫu JDBC của Spring không sử dụng các giá trị mặc định của bảng

Một trong các cột có giá trị mặc định và tôi không chỉ định nó trong bản đồ Map<String, Object> parameters.

Tôi nhận được ngoại lệ Column 'colName' cannot be null.

Mọi người có thể giải thích điều này không?

Cảm ơn

* Sửa: Mã *

contactDetailsInsertTemplate = new SimpleJdbcInsert(dataSource).withTableName("contactdetails").usingGeneratedKeyColumns("contactcode"); 
Map<String, Object> parameters = new HashMap<String, Object>(); 
Number newId = contactDetailsInsertTemplate.executeAndReturnKey(parameters); 
+0

Vui lòng hiển thị mã bạn đang sử dụng. –

Trả lời

11

Bạn cần giới hạn các cột được chỉ định trong Chèn SQL.

Xem SimpleJdbcInsert.usingColumns()

Nếu bạn không làm điều này, các câu lệnh SQL sẽ cần giá trị cho tất cả các cột và các giá trị mặc định không thể được sử dụng.

ví dụ: sử dụng

insert into mytable (col1, col2) values (val1, val2); 

thay vì

insert into mytable values (val1, val2); 
1

INSERT INTO mytable (1,null) là không giống như INSERT INTO mytable (1). Trước khi chèn cụ thể null, sau đó để lại quyết định lên đến DB (đó sẽ là giá trị mặc định). Spring JDBC đang làm việc trước đây.

+0

Cảm ơn câu trả lời. Cả hai câu trả lời đều đúng nhưng câu trả lời của NickJ chính xác hơn cho câu hỏi cụ thể. tôi ước tôi có thể chấp nhận cả hai bạn nhưng tôi sẽ chấp nhận anh ấy và upvote bạn :). – Gleeb

1

Vấn đề là ở một nơi khác: khi tôi sử dụng SimpleJdbcInsert và vượt qua bản đồ về các thông số để nó, tôi đơn giản mong đợi để tạo chèn Statment chỉ với các thông số tôi cung cấp. Tôi có một cột NOT NULL trong bảng với giá trị DEFAULT và tôi không muốn chỉ định nó. Tôi cũng không muốn đặt một cách rõ ràng tất cả các tên cột trong usingColumns() vì tôi vừa làm điều đó khi tạo bản đồ các thông số! Tại sao tôi nên làm lại? Vấn đề là SimpleJdbcInsert muốn trở nên thông minh hơn và thêm tất cả các cột để chèn câu lệnh không cần thiết. Tại sao không tạo một câu lệnh chỉ sử dụng các cột được cung cấp với các tham số map?

Xem: http://forum.spring.io/forum/spring-projects/data/54209-simplejdbcinsert-and-columns-with-default-values

0

Bạn có thể thêm các cột trong đó có một giá trị mặc định như tham số cho usingGeneratedKeyColumns().
Tên cột được bao gồm làm tham số của phương thức đó sẽ bị bỏ qua từ câu lệnh INSERT được tạo.

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