2016-04-12 39 views
6

我有一个Student类具有以下属性:如何将Table-Valued参数从java传递给sql server存储过程?

Name, Department, Address, Grade. 

现在我有一个包含一些Student对象像这样的ArrayList

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")); 

我需要此ArrayList传递到存储在SQL Server过程并将学生对象数据插入表中。 如何在Java中最好地实现这一点?我需要有一个存储过程。

Java版本8,Sql Server 2014如果有任何使用。

+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

另请参阅https://blogs.technet.microsoft.com/dataplatforminsider/2016/04/04/preview-the-microsoft-jdbc-driver-6-0-for-sql-server/和https:/ /msdn.microsoft.com/en-us/library/mt651781.aspx请注意这需要SQL Server JDBC 6.0预览(!)驱动程序。 –

回答

9

随着Mark Rotteveel提供的输入,我能够做到这一点。谢谢马克,Sean感谢您的意见。以下是您可能觉得有用的任何人的工作代码。

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在6.0-preview版本的Apr-1版本中添加了此功能:https://www.microsoft.com/en-us/download/details.aspx?id=11774 – nirmal

+0

作为替代Castred PreparedStatement ,可以将SQLServerDataTable实例传递给PreparedStatement.setObject(int,Object)方法。这适用于在dbo模式中定义的TVP类型。 – allenru

+0

SQLServerDataTable不再作为驱动程序下载的一部分提供。 –

相关问题