2016-04-12 11 views
6

Tôi có một lớp Student với các thuộc tính sau:Làm cách nào để chuyển các tham số Bảng-Giá trị từ thủ tục lưu trữ máy chủ java sang sql?

Name, Department, Address, Grade. 

Bây giờ tôi có một ArrayList có chứa một số Student đối tượng như thế này,

List<Student> stuList = new ArrayList<Student>(); 
stuList.add(new Student("Tom","Comp", "123 street", "A")); 
stuList.add(new Student("Jery","Comp", "456 street", "A+")); 
stuList.add(new Student("Mac","Maths", "Dum Street", "B")); 

tôi cần phải vượt qua ArrayList này đến máy chủ sql lưu trữ thủ tục và chèn dữ liệu đối tượng sinh viên vào bảng. Làm thế nào để đạt được điều này tốt nhất trong Java? Tôi bắt buộc phải có một thủ tục được lưu trữ.

Java phiên bản 8, Sql Server 2014 nếu có bất kỳ việc sử dụng nào.

+0

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/f7377f1c-f235-4870-b4a9-eab041fbd7b5/is-tablevalued-parameters-available-in-java-jdbc? forum = sqldatabaseengine –

+0

Xem thêm https://blogs.technet.microsoft.com/dataplatforminsider/2016/04/04/preview-the-microsoft-jdbc-driver-6-0-for-sql-server/ và https://msdn.microsoft.com/en-us/library/mt651781.aspx Lưu ý rằng điều này yêu cầu trình điều khiển SQL Server JDBC 6.0 Preview (!). –

Trả lời

9

Với các đầu vào được cung cấp bởi Mark Rotteveel Tôi đã có thể thực hiện. Cảm ơn Mark, Sean cảm ơn bạn đã nhập liệu. Đây là mã làm việc cho bất kỳ bạn nào có thể thấy nó hữu ích.

String jdbcurl = "jdbc:sqlserver://TestServer:1433;DatabaseName=Student"; 
connection = DriverManager.getConnection(jdbcurl,"username","password"); 

SQLServerDataTable stuTypeDT = new SQLServerDataTable(); 
stuTypeDT.addColumnMetadata("StudentId", java.sql.Types.NUMERIC); 
stuTypeDT.addColumnMetadata("Name", java.sql.Types.VARCHAR); 
stuTypeDT.addColumnMetadata("Department", java.sql.Types.VARCHAR); 
stuTypeDT.addColumnMetadata("Address", java.sql.Types.VARCHAR); 

stuTypeDT.addRow("1","Tom", "A", "123 Street"); 
stuTypeDT.addRow("2","Jery", "B", "456 Street"); 
stuTypeDT.addRow("3","Mac", "C", "Vancour"); 

String ececStoredProc = "EXEC InsertStudentInfo ?"; 
SQLServerPreparedStatement pStmt = (SQLServerPreparedStatement)connection.prepareStatement(ececStoredProc); 
pStmt.setStructured(1, "dbo.StudentInfoType", stuTypeDT); 
pStmt.execute(); 
+0

MS đã thêm tính năng này vào bản phát hành ngày 1 tháng 4 của bản xem trước 6.0 có sẵn tại đây: https://www.microsoft.com/en-us/download/details.aspx?id=11774 – nirmal

+0

Thay thế cho việc đúc Chuẩn bị sẵn sàng , bạn có thể truyền thể hiện SQLServerDataTable cho phương thức PreparedStatement.setObject (int, Object). Điều này làm việc cho một loại TVP đã được xác định trong lược đồ dbo. – allenru

+0

SQLServerDataTable không còn có sẵn như là một phần của tải xuống trình điều khiển. –

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