Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将表值参数从java传递到sql server存储过程?_Java_Sql Server_Sql Server 2008_Jdbc_Mssql Jdbc - Fatal编程技术网

如何将表值参数从java传递到sql server存储过程?

如何将表值参数从java传递到sql server存储过程?,java,sql-server,sql-server-2008,jdbc,mssql-jdbc,Java,Sql Server,Sql Server 2008,Jdbc,Mssql Jdbc,我有一个学生类,具有以下属性: Name, Department, Address, Grade. 现在我有了一个ArrayList,它包含了一些Student这样的对象 List<Student> stuList = new ArrayList<Student>(); stuList.add(new Student("Tom","Comp", "123 street", "A")); stuList.add(new Student("Jery","Comp", "4

我有一个
学生
类,具有以下属性:

Name, Department, Address, Grade. 
现在我有了一个
ArrayList
,它包含了一些
Student
这样的对象

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"));
List stuList=newarraylist();
添加(新学生(“汤姆”、“康普”、“123街”、“A”);
添加(新学生(“杰里”、“康普”、“456街”、“A+”));
添加(新学生(“Mac”、“数学”、“Dum Street”、“B”);
我需要将此arraylist传递给sql server存储过程,并将学生对象数据插入表中。 如何在Java中最好地实现这一点?我需要一个存储过程


Java版本8,Sql Server 2014,如果它有任何用途的话。

通过我提供的输入,我能够做到这一点。谢谢马克,也谢谢你的意见。以下是您可能会觉得有用的工作代码

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

另请参见并注意,这需要SQL Server JDBC 6.0预览(!)驱动程序。MS在其6.0-Preview的Apr-1版本中添加了此功能,此处提供:作为强制转换PreparedStatement的替代方法,您可以将SQLServerDataTable实例传递给PreparedStatement.setObject(int,Object)方法。这适用于dbo架构中定义的TVP类型。SQLServerDataTable不再作为驱动程序下载的一部分提供。@FinniMcFinger MS驱动程序包中有几个JAR。你确定你找对地方了吗?我只是从MS站点重新下载了它,并验证了该类是否在jar中。您必须选择MS JDBC驱动程序6.0版本。然后,站点要求您选择一个文件,我选择了sqljdbc_6.0.7507.100_enu.tar.gz。下载后,在该归档文件中,我只使用了sqljdbc42.jar。@allenru您是对的。它位于sqljdbc42.jar中。我在查看sqljdbc6.jar。干杯